直流电机8874驱动
各引脚说明:
-
EN:使能引脚。接GPIO的输出
-
PH:PWM信号引脚,当占空比>50%时转动一个方向,小于50%时转动另一个方向,等于50%时不转。接TIM的PWM输出
-
SLEEP:为低电平时进入低功耗模式。接GPIO的输出
-
FAULT:故障指示灯输出。在故障状况期间下拉为低电平。连接一个外部上拉电阻器以执行开漏操作。接GPIO的输入
-
VREF:外部基准电压输入至所设置的内部电流调节极限。接单片机的模拟输出,输出值经过计算得出
-
IPROPI:电流感测。接控制器的ADC口。接单片机的的ADC输入
关于VREF和IPROPI引脚:这个属于比较高级的功能,如果用不到的话,最后定型可以不接单片机,直接用电阻固定下来。不用的话,VREF你直接接3.3V IPROPI悬空就行
用的是PH/EN控制模式,EN作为使能IO口,PH接控制器的PWM输出,OUT1和OUT2分别接电机的两端
注意:
直流电机GA24-370,24V
淘宝链接
电机型号为:
步进电机42STH49-2004ASC
步进电机HR4988驱动
引脚说明:
- EN:。当其为逻辑高电平时,输出关断。当其为逻辑低电平时,内部控制使能起作用。
- SLEEP:当 SLEEP 引脚输入为低电平时,器件将进入休眠模式,从而大大降低器件空闲的功耗;当其输入翻转为高电平时,系统恢复到正常的操作状态并将器件的输出预置到 HOME 状态,为了内部电荷泵恢复稳定工作,在 SLEEP 恢复高电平并延时1ms 后 STEP 信号才能起作用。
- STEP:STEP 信号上升沿触发有效,通过TRANSLATOR 控制,每个 STEP 上升沿触发使得电机有一个步进的变化。TRANSLATOR 控制 DAC 的输入和流过线圈的电流方向;每一步进的电流大小和转动角度由MS1、 MS2 和 MS3 输入逻辑电平控制。
- DIR:DIR 输入控制马达的转动方向,在 STEP 信号上升沿触发到来之前,任何 DIR上的变动都对电路不产生影响;
- KF:此为归零引脚,接单片机的IO输入引脚。
机械接近开关接到p6
按照图示接法即可,开关断开的时候,KF是高电平;开关闭合的时候,KF是低电平,以此来判断是否归零。
单片机引脚分配
测试采用STM32F103ZET6单片机,共需单片机引脚如下:
-
直流电机1:
- EN使能——IO输出 PA12
- PH——PWM输出 PA0
- SLEEP——IO输出 PA11
- FAULT报警——IO输入 PA8 上拉
- VREF——3.3V电源输出(若要测试可根据计算调整,使用DAC) PA4
- IPROPI——模拟输入ADC PA1
- 编码器线1——外部中断 PC8
- 编码器线2——外部中断 PC9
(一般DAC远比PWM昂贵,PWM速度慢,但是线性好。)
-
直流电机2:
- EN使能——IO输出
- SLEEP——IO输出
- PH——PWM输出
- FAULT报警——IO输入
- VREF——3.3V电源输出(若要测试可根据计算调整,使用DAC)
- IPROPI——模拟输入ADC
- 编码器线1——IO输入
- 编码器线2——IO输入
-
步进电机:
- EN使能——IO输出 PG6
- SLEEP——IO输出 PG5
- STEP——IO输出 PG4
- DIR——IO输出 PG3
- FK——IO输入 PG2
-
串口通讯 异步通讯
- 发送引脚——TX PA9
- 接收引脚——RX PA10
-
其他
- 运行指示灯——PA8 TIM1_CH1 1s翻转一次
- LED运行指示灯 PB5
- 测试电位计ADC——PA2 ADC1_IN2
注意:步进电机刹车连线
测试板注意事项
- 拿板子拿侧面,目前还没有喷三防,容易短路
- 建议调一下步进细分,转动会更顺滑
- 开关电源调整24V,先把开关电源的正极线拿下来,先把开关电源和测试板连接好,等开关电源稳定后再接上正极。
阶段性总结
启明云端旋钮屏部分
因硬件需在5月份做好,并且较为复杂的直流电机控制部分从方案中取消,现在对这一个月的学习进行总结。
首先学习了FreeRtos嵌入式操作系统的基本工作原理,对队列,任务机制进行了系统了解。
启明云端的旋钮屏开发:
开发流程如下:
- 在电脑上安装ESP-IDF4.4集成开发环境,建议安装官网的离线安装包,因为旋钮屏的SDK是依赖于IDF的版本的,所以如果不兼容的话,编译不能通过。
- 安装VSCode,并且在里面安装Expressif插件。
视频安装教程
- 用VSCode的原因:代码编辑非常方便,如果使用乐鑫的开发板的话,可以直接安装这个就可以实现编译和烧录,省去第一步。但是对于启明云端的旋钮屏来说,它的SDK里的对应这款旋钮屏的例程,用VSCode烧录总会出现开发板不匹配的问题,目前还没解决,所以本人采用的是ESP-IDF加VSCode的方式,用ESP-IDF4.4命令行进行编译和烧录,用VSCode进行代码编辑。在编译之前先点击SDK文件夹里的load_windows.bat文件,选择旋钮屏的型号,然后再idf.py build 、 idf.py flash
- 旋钮屏开发是采用8ms+ESP32-s2的方式,8ms是一个图形化的UI开发平台,其本质也就是其生成的代码还是使用的LVGL图形库,LVGL全称LittleVGL,是一个轻量化的,开源的,用于嵌入式GUI设计的图形库,8ms平台下载的源码中将qmsd_ui替换掉SDK里的相应开发板的对应部分。这里需要注意:在8ms平台中,可以用blockly积木拼接的方式编写控件实现逻辑,但是这些逻辑的触发方式都是针对触摸屏的,对于这款无触摸方式的旋钮屏+按键的方式来说,这个blockly的逻辑是不能直接用的,都要结合旋钮和按键重新编写逻辑,blockly生成的代码存放在qmsd_internal_ui_cb.c文件中,其中有各个控件编好的回调函数,只需要调用即可触发编写好的对应逻辑。
- 各个控件相应的触发事件用旋钮+按钮编写的部分在main->qmsd_control.c的qmsd_control_init()函数中,此函数的功能为发送事件;然后事件所对应的逻辑实现在main.c的__qmsd_got_encoder_func函数里面写,此函数的功能为接收事件,并进行处理。
- 首先判断处于那一页,然后判断是什么事件,然后再写触发的逻辑。这里我将旋钮编码器一周分为6个事件,结合每个页面的控件数量,对每个控件进行事件分配, scr = lv_scr_act()能获得当前位于哪个界面。通过改变控件的颜色来表示进入选中状态。
目前尚未解决的问题:编码器的读取函数有问题,数据总是飘,需要自己重新写
此问题已解决,原因为:再找到源码后,编译时,需要fullclean后再build,这样才会生效
STM32CubeMX
本次STM32开发用的STM32CubeMX软件结合keil5,熟练CubeMX基本操作,并使用了GPIO、定时器中断来转换LED运行灯、配置时钟、DAC模拟输出、ADC的DMA模式读取电位计的模拟输入、外部中断来获取编码器脉冲、printf重写、串口通讯。
目前尚未解决的问题:直流电机的正反转不对称问题,以及和旋钮屏实现串口通讯。
附录:
- FreeRtos(基于ESP32):
B站视频学习链接-ESP32_freeRTOS教程
1-10 —— 环境搭建和Task任务
11-14 —— 队列
15 —— 软件定时器
16-19 —— 信号量和互斥量
20-23 —— 事件组等待、事件同步、消息同步、通知值
24-27—— 流数据缓冲区和消息缓冲区 - ESP-IDF
B站视频学习链接-孤独的二进制
ESP-IDF开发入门
ESP-IDF常用函数说明 - ESP32
B站视频学习链接-ESP32超详细使用教程(使用VSCode,基于Arduino框架)
使用VSCode开发ESP32(基于Arduino框架) - ESP8266
太极创客官网
B站学习教程-【ESP8266教程】零基础入门学用物联网-基础知识篇(太极创客团队)
零基础入门学用物联网 - Arduino
太极创客官网
Arduino - STM32CubeMx
B站视频教程-STM32CubeMX&HAL库教学_快速STM32基础功能学习系列
STM32CubeMX软件