01測(cè)試介紹
本次測(cè)試使用MC SDK提供的API函數(shù)調(diào)節(jié)電機(jī)的轉(zhuǎn)速。
測(cè)試硬件:
IHM16M1 +NUCLEO-G431RB 電機(jī)套件
SSD1306 OLED IIC接口顯示屏·
EC1 旋轉(zhuǎn)編碼器
RED LED 燈
ZD2808-V1.9 BLDC 電機(jī)
杜邦線(xiàn)+萬(wàn)用板+Type-C連接線(xiàn)
12V 1A開(kāi)關(guān)電源
測(cè)試使用EC1旋轉(zhuǎn)編碼器調(diào)節(jié)電機(jī)的目標(biāo)轉(zhuǎn)速,使用開(kāi)發(fā)板user1按鈕啟動(dòng)/停止電機(jī)。OLED顯示電機(jī)轉(zhuǎn)速和調(diào)節(jié)轉(zhuǎn)速設(shè)置,LED指示電機(jī)狀態(tài)
02開(kāi)發(fā)板資源分配
SSD1306 OLED使用 I2C1 接口,引腳 PB9 =>SDA ,PB8 => SCL
EC1旋轉(zhuǎn)編碼器 使用 TIM3定時(shí)器 ,引腳 PC6 => TIM3_CH1,PC7 => TIM3_CH2
RED LED ,引腳 PB7 => LED
03程序設(shè)置與引腳分配
1、旋轉(zhuǎn)編碼設(shè)置
EC1旋轉(zhuǎn)編碼器,使用TIM3定時(shí)器,模式設(shè)置為:ENCoder MODE,引腳PC6 => EC1_CLK, PC7 => EC1_DT
輸入過(guò)濾值選擇:15,其它默認(rèn)。如果EC1旋轉(zhuǎn)時(shí)跳動(dòng)厲害,可以降低TIM3預(yù)分頻器。
2、SSD1306 128*64 OLED
OLED使用I2C1作為控制,引腳PB9 =>OLED_SDA ,PB8 => OLED_SCL
3、RED LED
LED使用GPIO PB8引腳,將引腳設(shè)置上拉和輸出模式。
04程序與工作原理
1、EC1是一種簡(jiǎn)易的旋轉(zhuǎn)編碼器,可以生產(chǎn)兩路脈沖CLK、DT,該組脈沖相差90度,編碼器作為機(jī)械部件其輸出的波形不如磁編的好,所以輸出引腳需要上拉電阻和103的電容濾波。
編碼器可以使用__HAL_TIM_GET_COUNTER(&htim3)獲得編碼的計(jì)數(shù)累加值。__HAL_TIM_SetCounter(&htim3,0);設(shè)置編碼器的初始值。
向上滑動(dòng)閱覽
/* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_ADC1_Init(); MX_ADC2_Init(); MX_CORDIC_Init(); MX_TIM1_Init(); MX_USART2_UART_Init(); MX_MotorControl_Init(); MX_I2C1_Init(); MX_TIM3_Init(); /* Initialize interrupts */ MX_NVIC_Init(); /* USER CODE BEGIN 2 */ rspeed = MC_GetMecSpeedReferenceMotor1(); HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_ALL); ssd1306_Init(); ssd1306_Fill(Black); ssd1306_SetCursor(0, 0); ssd1306_WriteString("EEWORLD", Font_11x18, White); ssd1306_UpdateScreen(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if (IDLE == MC_GetSTMStateMotor1()) { /* Ramp parameters should be tuned for the actual motor */ HAL_GPIO_WritePin(Mstatus_GPIO_Port,Mstatus_Pin,GPIO_PIN_RESET); speed = 0; counter = __HAL_TIM_GET_COUNTER(&htim3); if(counter != counter_old) { //rspeed = MC_GetMecSpeedReferenceMotor1(); rspeed += counter/2; if( rspeed <0) { rspeed=0; __HAL_TIM_SetCounter(&htim3,0); } if( rspeed > 420) { rspeed=420; __HAL_TIM_SetCounter(&htim3,0); } MC_ProgramSpeedRampMotor1(rspeed, 1000); } counter_old = counter; } else { HAL_GPIO_WritePin(Mstatus_GPIO_Port,Mstatus_Pin,GPIO_PIN_SET); speed = MC_GetMecSpeedAverageMotor1(); } ssd1306_Fill(Black); ssd1306_SetCursor(0, 0); ssd1306_WriteString("SPEED TEST", Font_11x18, White); ssd1306_SetCursor(0, 20); memset(MessageStr,'?',sizeof(MessageStr)); sprintf(MessageStr,"%d RPM",speed * 6); ssd1306_WriteString(MessageStr, Font_11x18, White); ssd1306_SetCursor(0, 40); memset(MessageStr,'?',sizeof(MessageStr)); sprintf(MessageStr,"%d R",rspeed * 6); ssd1306_WriteString(MessageStr, Font_11x18, White); ssd1306_UpdateScreen(); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
2、電機(jī)的狀態(tài)使用MC_GetSTMStateMotor1()函數(shù)返回,IDLE狀態(tài)為電機(jī)停止且準(zhǔn)備好狀態(tài),在該狀態(tài)下可以調(diào)節(jié)參數(shù)和設(shè)置電機(jī)啟動(dòng)。本例將電機(jī)參數(shù)設(shè)置放在該狀態(tài)下完成。
向上滑動(dòng)閱覽
if (IDLE == MC_GetSTMStateMotor1()) { /* Ramp parameters should be tuned for the actual motor */ HAL_GPIO_WritePin(Mstatus_GPIO_Port,Mstatus_Pin,GPIO_PIN_RESET); speed = 0; counter = __HAL_TIM_GET_COUNTER(&htim3); if(counter != counter_old) { //rspeed = MC_GetMecSpeedReferenceMotor1(); rspeed += counter/2; if( rspeed <0) ? ? ? ? { ? ? ? ? ? rspeed=0; ? ? ? ? ? __HAL_TIM_SetCounter(&htim3,0); ? ? ? ? } ? ? ? ? if( rspeed > 420) { rspeed=420; __HAL_TIM_SetCounter(&htim3,0); } MC_ProgramSpeedRampMotor1(rspeed, 1000); } counter_old = counter; } else { HAL_GPIO_WritePin(Mstatus_GPIO_Port,Mstatus_Pin,GPIO_PIN_SET); speed = MC_GetMecSpeedAverageMotor1(); }
參數(shù)設(shè)置:MC_ProgramSpeedRampMotor1(rspeed, 1000);該函數(shù)可以設(shè)置從上一個(gè)狀態(tài)到目標(biāo)狀態(tài)需要持續(xù)的時(shí)間,其時(shí)間斜率需要根據(jù)電機(jī)的性能參數(shù)而定。
05測(cè)試
修改轉(zhuǎn)速過(guò)程,使用旋轉(zhuǎn)編碼器進(jìn)行參數(shù)的調(diào)節(jié),順時(shí)針:增加轉(zhuǎn)速,逆時(shí)針:降低轉(zhuǎn)速
以上測(cè)評(píng)內(nèi)容撰寫(xiě)自電子工程世界(EEWORLD)用戶(hù):bigbat。感謝這位小伙伴對(duì)測(cè)評(píng)活動(dòng)的大力支持!
-
OLED
+關(guān)注
關(guān)注
121文章
6310瀏覽量
231364 -
編碼器
+關(guān)注
關(guān)注
45文章
3875瀏覽量
140532 -
電機(jī)
+關(guān)注
關(guān)注
143文章
9421瀏覽量
152208 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
6007瀏覽量
110102
原文標(biāo)題:【測(cè)評(píng)分享】IHM16M1開(kāi)發(fā)板電機(jī)調(diào)速攻略
文章出處:【微信號(hào):易絡(luò)盟電子,微信公眾號(hào):易絡(luò)盟電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Nucleo-F446RE+X-NUCLEO-IHM07M1生成的應(yīng)用為什么啟動(dòng)設(shè)置參數(shù)無(wú)效?
X-NUCLEO-IHM16M1驅(qū)動(dòng)板上三電阻采樣和單電阻采樣是怎么切換的?
關(guān)于P-NUCLEO-IHM03上電后電機(jī)的問(wèn)題求解
STM32F103RB+IHM07M1 SDK中顯示Feedback Error是哪里的問(wèn)題?
X-NUCLEO-IHM07M1電機(jī)調(diào)速降不了是什么原因?qū)е碌模?/a>
《電子發(fā)燒友電子設(shè)計(jì)周報(bào)》聚焦硬科技領(lǐng)域核心價(jià)值 第13期:2025.05.26--2025.05.30
轉(zhuǎn):P-NUCLEO-IHM001 電機(jī)開(kāi)發(fā)板串口調(diào)試指南
怎么制作一個(gè)用PWM調(diào)節(jié)電機(jī)轉(zhuǎn)速的程序
請(qǐng)問(wèn)F28027F控制無(wú)刷電機(jī)轉(zhuǎn)速的函數(shù)是什么?
如何通過(guò)PWM調(diào)節(jié)電機(jī)的PWM?
Explorer 16開(kāi)發(fā)板用戶(hù)指南
Cepark AVR M16開(kāi)發(fā)板原理圖

IHM01A1步進(jìn)電機(jī)驅(qū)動(dòng)板的電路原理圖免費(fèi)下載

評(píng)論