stm32中的步进电机驱动和lcd显示问题 STM32 驱动LCD屏的相关问题

\u73b0\u5728\u8981\u7528STM32\u505a\u4e00\u4e2a\u63a7\u5236\u6b65\u8fdb\u7535\u673a\u7684\u5b9e\u9a8c\u548c\u6db2\u6676\u663e\u793a\u7684\u5b9e\u9a8c

\u7528STM32F103\u7cfb\u5217\uff0c\u6b65\u8fdb\u7535\u673a\u53ef\u4ee5\u9009\u752835BYJ46\u53ef\u4ee5\u7528MOS\u9a71\u52a8\u6216\u8005\u52a0\u6b65\u8fdb\u7535\u673a\u9a71\u52a8\u82af\u7247ULN2003\uff0c\u6db2\u6676\u663e\u793a\u7684\u8bdd\u53ef\u4ee5\u6dd8\u5b9d\u4e0a\u4e70

\u4ece51\u79fb\u690d\u5230STM32\u4e0a\u7684\u4ee3\u7801\u5982\u679c\u662fIO\u6a21\u62df\u5404\u79cd\u63a5\u53e3\uff08\u770b\u4f60\u4ee3\u7801\u5c31\u662fIO\u6a21\u62df\u7684\uff09
\u90a3\u6700\u9700\u8981\u6ce8\u610f\u7684\u5c31\u662f\u5ef6\u65f6\uff0c\u572851\u91ccIO\u64cd\u4f5c\u7684\u5ef6\u65f6\u4f60\u8981\u77e5\u9053\u5927\u6982\u662f\u591a\u4e45
\u79fb\u690d\u5230STM32\u4e0a\u9700\u8981\u8bbe\u5b9a\u6210\u4e00\u6837\u7684\u65f6\u95f4\uff0c\u56e0\u4e3a\u4e8c\u8005\u7684\u4e3b\u9891\u4e0d\u4e00\u6837\uff0c\u540c\u6837\u7684\u5ef6\u65f6\u51fd\u6570\u5ef6\u65f6\u65f6\u95f4\u5dee\u4e86\u592a\u591a\u3002
\u7136\u540e\u770b\u770b\u5404\u4e2aIO\u7684\u65f6\u949f\u662f\u4e0d\u662f\u5f00\u542f\u4e86\uff0c\u8f93\u51fa\u5f62\u5f0f\u5bf9\u4e0d\u5bf9\uff0c\u5e94\u8be5\u5c31\u8fd9\u4e9b\u3002

用定时器1产生脉冲给步进电机驱动器驱动步进电机转用,然后用滴嗒定时器中断,过100MS或若干MS更新LCD显示数值。篇幅有限,只粘贴部份代码,芯片是stm32 F103ZEt6

int main(void)
{
/* 复位所有外设,初始化Flash接口和系统滴答定时器 */
HAL_Init();
/* 配置系统时钟 */
SystemClock_Config();
BSP_LCD_Init();

KEY_GPIO_Init();

STEPMOTOR_TIMx_Init();

LCD_Clear(0,0,LCD_DEFAULT_WIDTH,LCD_DEFAULT_HEIGTH,BLACK);

/* 开背光 */
LCD_BK_ON();

/* 无限循环 */
while (1)
{
if(KEY1_StateRead()==KEY_DOWN)
STEPMOTOR_AxisMoveRel(6400*-5, 500 , 500 , 4000);
if(KEY2_StateRead()==KEY_DOWN)
STEPMOTOR_AxisMoveRel(6400*5, 500 , 500 , 4000);
}
}
void HAL_SYSTICK_Callback(void)
{
time_count++; // 每1ms自动增一
if(time_count==100) // 0.5s
{
uint8_t str[50];
sprintf((char *)str,"%d",srd.step_delay);//显示定时器计数值
LCD_Clear(120,300,200,24,BLACK);
LCD_DispString_EN(120,300,(char *)str,BLACK,RED,USE_FONT_24);

sprintf((char *)str,"%d",step_position/6400); //显示总共多少圈
LCD_Clear(120,400,200,24,BLACK);
LCD_DispString_EN(120,400,(char *)str,BLACK,RED,USE_FONT_24);

time_count=0;

if(MotionStatus==STOP)
{
LCD_Clear(120,430,200,24,BLACK);
LCD_DispString_EN(120,430,"motro is stop",BLACK,RED,USE_FONT_24);
sprintf((char *)str,"%d",srd.decel_val/6400); //显示减速有多少圈
LCD_Clear(120,430+24,200,24,BLACK);
LCD_DispString_EN(120,430+24,(char *)str,BLACK,RED,USE_FONT_24);

}

else
{
LCD_Clear(120,430,200,24,BLACK);
LCD_DispString_EN(120,430,"motro is running",BLACK,RED,USE_FONT_24);
sprintf((char *)str,"%d",0);
LCD_Clear(120,430+24,200,24,BLACK);
LCD_DispString_EN(120,430+24,(char *)str,BLACK,RED,USE_FONT_24);
}
}
}

while(1){
d=key(); //读键盘值,得到增量值
motor(d); //去驱动电机
display(d); //去刷新显示
。。。。。
}
在时间分配上,控制电机的键盘值的有效读取,则需要在电机完成上一次动作之后,才能读取判断。而motor(),display(),及其他函数需要同时运行的话,就需要通过中断方式来分配运行时间片。
按你目前的学习情况,还不需要考虑时间分配问题,motor()的延时就在该函数体内完成面,display()的延时就在该函数体内完成面就好了;

  • stm32鐢垫満椹卞姩涓杈硅浆鍔
    绛旓細纭欢闂銆stm32鐢垫満椹卞姩涓杈硅浆鍔ㄦ槸鐢变簬纭欢闂瀵艰嚧鐨勩傞噰鐢STM32椹卞姩28BYJ4姝ヨ繘鐢垫満,瀹炵幇姝h浆鍙嶈浆,瀹屾垚瑙掑害璋冩暣銆傛杩涚數鏈烘槸涓绉嶅皢鐢佃剦鍐茶浆鍖栦负瑙掍綅绉荤殑鎵ц鏈烘瀯銆傚綋姝ヨ繘椹卞姩鍣ㄦ帴鏀跺埌涓涓剦鍐蹭俊鍙,椹卞姩姝ヨ繘鐢垫満鎸夎瀹氱殑鏂瑰悜杞姩---涓涓浐瀹氱殑瑙掑害(鍙婃杩涜)銆
  • stm32涓涓珮绾у畾鏃跺櫒鑳芥帶鍒跺嚑璺棤鍒鐢垫満
    绛旓細stm32涓涓珮绾у畾鏃跺櫒鑳芥帶鍒6璺棤鍒风數鏈恒傛牴鎹煡璇㈢浉鍏冲叕寮淇℃伅鏄剧ず锛STM32鍒╃敤楂樼骇瀹氭椂鍣ㄤ骇鐢6璺簰琛WM娉㈠舰杈撳嚭鍦˙LDC涓璈-PWM-L-ON椹卞姩鏂瑰紡涓嬮┍鍔ㄦ棤鍒风數鏈猴紝stm32楂樼骇瀹氭椂鍣ㄦ槸涓撻棬鐢ㄦ潵鍋氭帶鍒剁敤鐨勶紝楂樼骇瀹氭椂鍣ㄥ拰閫氱敤瀹氭椂鍣ㄧ殑鍖哄埆鏄畠鍙互杈撳嚭7璺疨WM娉㈠舰鍜屾瘮杈冭緭鍑猴紝鍙互椹卞姩鏃犲埛鐢垫満锛姝ヨ繘鐢垫満锛屽拰鐩存祦鐢垫満...
  • stm32鍗曠墖鏈鑳椹卞姩姝ヨ繘鐢垫満鍚
    绛旓細鍙互鐨勶紝浣跨敤stm32鐨pwm妯″潡鍔熻兘杩涜椹卞姩锛屾敞鎰忚璁″鍥寸數璺
  • 鍗曠墖鏈鸿緭鍑3.3V鐢靛帇,濡備綍椹卞姩5V鎵嶈兘杩愯鐨勬杩涚數鏈
    绛旓細鍗曠墖鏈虹殑杈撳嚭鏃犳硶鐩存帴甯﹀姩姝ヨ繘鐢垫満锛屼綘鍙噰鐢ㄥ嚑涓笁鏋佺鍏卞皠鏀惧ぇ鐢佃矾鏉ユ帶鍒舵杩涚數鏈猴紙閲囩敤鍏卞湴褰㈠紡锛夛紝鍗曠墖鏈鸿緭鍑哄幓椹卞姩鍏卞皠鐢佃矾鐨勫熀鏋佸嵆鍙
  • stm32杩炴帴涓や釜鐩稿悓鐨勬杩涚數鏈寮曡剼鎬庝箞鍐
    绛旓細1銆侀鍏堬紝鍦ㄧ數鏈轰粈涔堢數閮芥病鏈夋帴鐨勬儏鍐典笅锛岀敤涓囩敤琛ㄦ祴閲忓洓涓鑴氥2銆佺劧鍚庯紝涓や袱鐭帴锛堟垨鑰呴樆鍊煎緢灏忥級鐨勪负涓缁勶紝鍙互鍒嗗埆鎺鍔狅紝a鍑忓墿浣欐帴B鍔狅紝B鍑忋3銆佹渶鍚庯紝璐翠竴涓STM32涓插彛鎺у埗姝ヨ繘鐢垫満鐨浠g爜鍗冲彲銆
  • STM32椹卞姩TB6560姝ヨ繘鐢垫満
    绛旓細姝ヨ繘鐢垫満鏈潵鎺у埗灏辩畝鍗曞晩锛屼竴涓剦鍐茶蛋涓涓搴︼紝瑙掑害鐨勫ぇ灏忛氳繃鎷ㄧ爜寮鍏宠缃傚崟鐗囨満鑷冲皯鎻愪緵涓や釜淇″彿锛氭柟鍚戝拰姝ヨ繘鑴夊啿锛圥WM娉級锛涙柟鍚戦珮浣庣數骞冲搴旀鍙嶈浆锛堝搴斿叧绯荤湅璇存槑涔︼級锛岄熷害涓昏鏈塒WM娉㈡帶鍒讹紙涓昏閮ㄥ垎锛夛紱浣胯兘淇″彿鏍规嵁闇瑕佺洿鎺ョ疆楂樻垨缃綆銆傝繖浜涗俊鍙锋渶濂界粡杩囧厜鑰﹂殧绂昏緭鍏ワ紱
  • 鎬庝箞瀹炵幇stm32鎺у埗鐢垫満杞竴鍛
    绛旓細1銆侀夋嫨涓涓悎閫傜殑鐢垫満锛屼竴涓姝ヨ繘鐢垫満銆佷己鏈嶇數鏈恒佺洿娴佺數鏈虹瓑銆傞夋嫨涓涓傚悎搴旂敤闇姹傜殑鐢垫満鏄潪甯搁噸瑕佺殑銆2銆佸浜庤澶氱數鏈猴紝闇瑕佷竴涓椹卞姩鍣ㄦ潵鎺у埗銆3銆佸湪STM32涓婏紝闇瑕侀厤缃傚綋鐨凣PIO寮曡剼鏉ユ帶鍒剁數鏈猴紝浣跨敤STM32鐨鍥轰欢鎴栧簱鍑芥暟锛岀紪鍐欐帶鍒剁數鏈虹殑浠g爜銆4銆佸湪灏嗕唬鐮佷笂浼犲埌STM32涔嬪墠锛岀‘淇濆凡缁忚繘琛屼簡鍏呭垎鐨勬祴璇...
  • stm32鎬庝箞鐢╬wm鎺у埗姝ヨ繘鐢垫満,鎴戠煡閬撴帶鍒舵杩涚數鏈鸿鏈塭na銆乨ir銆乸lu涓変釜...
    绛旓細ENA 鏄紑鍚 褰揈NA 涓洪珮鐢靛钩鏃讹紝姝ゆ椂鐨凱LU 杈撳叆鐨勪俊鍙 鎵嶄細鏈夋晥锛岋紝DIR 涓烘柟鍚 锛0 1 鍒嗗埆涓烘锛屽弽杞紝PLU 灏辨槸浣犺緭鍑虹殑鑴夊啿淇″彿 锛屽嵆PWM娉紝锛屽啓绋嬪簭鏃讹紝浣犲畾涔変互涓婁笁涓彉閲忥紝鍏朵腑PLU 杈撳叆涓涓剦鍐诧紝灏卞彲浠ヤ簡锛岋紝褰撶劧鑴夊啿棰戠巼瑕佺湅浣犲叿浣鐨勭數鏈 锛岋紝鏈変簡鑴夊啿锛岀粰椹卞姩鍣ㄥ氨鑳芥帶鍒剁數鏈鸿浆鍔紝...
  • stm32澶槼杩借釜鍘熺悊
    绛旓細鍏夌數杩借釜銆傛牴鎹煡璇STM32鍗曠墖鏈绯荤粺璇存槑涔﹀緱鐭ワ紝stm32澶槼杩借釜閲囩敤鍏夌數杩借釜鐨勫師鐞嗭紝鍒╃敤姝ヨ繘鐢垫満椹卞姩锛岀敱鍏夌數浼犳劅鍣ㄦ牴鎹叆灏勫厜绾跨殑寮哄急鍙樺寲浜х敓鍙嶉淇″彿鍒板井鏈哄鐞嗗櫒锛屾潵璋冩暣鎺у埗澶槼鑳界數姹犳澘鐨勮搴︽潵瀹炵幇瀵瑰お闃崇殑杩借釜銆
  • STM32F10椹卞姩A4988姝ヨ繘鐢垫満椹卞姩妯″潡绋嬪簭
    绛旓細鏈汉娌$敤杩嘇4988,浣嗕綘缁欏嚭鐨勬暟鎹湁鏄庢樉閿欒:1銆乂BB(鐢垫満鐢垫簮):鏈灏8V鏈澶35V,浣犵敤(VMOT鎺+5V)5V;(A4988璧勬枡涓婃病VMOT杩欎竴鎺ュ彛)銆2銆丒NABLE(浣胯兘)绔彛鎺+A4988鎵嶈兘宸ヤ綔,浣犵粰瀹0V鍗虫槸鍙畠浼戞伅涓嶅繀宸ヤ綔銆備互涓
  • 扩展阅读:电机型号大全对照表 ... 驱动器参数设置步骤 ... 32单片机步进电机程序 ... stm32控制四个步进电机 ... stm32控制步进电机转动 ... 4线步进机判断好坏 ... 步进电机怎么判断坏了 ... stm32可以直接驱动舵机 ... 步进电机型号及参数大全 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网