本帖最后由 King6688 于 2024-9-16 09:16 编辑
这几天一直比较忙,没空发,看了下时间今天就要截止了啊,于是赶紧写了起来~~
简介:
AI-WB2-32S直接用GPIO驱动电机,可能造成电流不足的问题,本次采用了ULN2003来驱动。
ULN2003 是一个单片高电压、高电流的达林顿晶体管阵列集成电路。它是由 7 对 NPN 达林顿管组成的,它的高电压输出特性和阴极二极管可以转换感应负载。单个达林顿对的集电极电流是 500mA。其内部相当于非门电路,即输入高输出为低,输入为低输出是高。
移植过程:
代码基本跟前几天写的SG90驱动舵机类似,只是接线方式稍有点差异,普通直流电机仅需2根线,分别为正极和负极,正极外接供电,与ULN2003 COMMON端连接。
引脚对应关系:
AI-WB2-32S开发板 | ULN2003 | 电机 | GPIO4 | 1IN | 电机1负极接2003的1OUT,正极接5V | GPIO3 | 2IN | 电机2负极接2003的2OUT,正极接5V
| GPIO17 | 3IN | 电机3负极接2003的3OUT,正极接5V
| GPIO14 | 4IN | 电机4负极接2003的4OUT,正极接5V
| 接线图:
另外,AI-WB2-32S有PWM0~4,其中,2、4都有2个GPIO引脚,需要注意。
主要代码:
- #define PWM_IO5 0
- #define PWM_IO16 1
- #define PWM_IO17 2
- #define PWM_IO3 3
- #define PWM_IO4 4
- #define PWM_IO14 4
- ...
- while(1) {
- PWM_Smart_Configure2(PWM_IO4, 80, 20000, 5000);
- PWM_Channel_Enable(PWM_IO4);
- vTaskDelay(pdMS_TO_TICKS(2000));
- PWM_Channel_Disable(PWM_IO4);
- vTaskDelay(pdMS_TO_TICKS(1000));
- PWM_Smart_Configure2(PWM_IO3, 80, 20000, 10000);
- PWM_Channel_Enable(PWM_IO3);
- vTaskDelay(pdMS_TO_TICKS(2000));
- PWM_Channel_Disable(PWM_IO3);
- vTaskDelay(pdMS_TO_TICKS(1000));
- PWM_Smart_Configure2(PWM_IO17, 80, 20000, 15000);
- PWM_Channel_Enable(PWM_IO17);
- vTaskDelay(pdMS_TO_TICKS(2000));
- PWM_Channel_Disable(PWM_IO17);
- PWM_Smart_Configure2(PWM_IO14, 80, 20000, 10000);
- PWM_Channel_Enable(PWM_IO14);
- vTaskDelay(pdMS_TO_TICKS(2000));
- PWM_Channel_Disable(PWM_IO14);
- }
复制代码 因为代码和之前发的SG90移植的都差不多,这次就不重复发了,可以尝试更改频率和占空比来控制电机的转速。
|
|