搜索

[资料分享] [RTOS] rtthread移植到雅特力AT32F403A驱动步进电机

[复制链接]
1261|1
 楼主 | 2020-5-17 16:55 | 显示全部楼层 |阅读模式
本帖最后由 cszzlsw 于 2020-5-17 17:07 编辑

1.开发板移植RTTHREAD
第一步,找到雅特力移植RTT的官方直播回放视频,地址:https://www.bilibili.com/video/BV1Yg4y1z7r5?t=122
第二步,看视频,并动手操作,温馨提示:看不懂的地方一定要多看几遍,个人认为讲视频的老师语速较慢,调成1.5倍舒服了
第三步,将原版官方工程拷贝一份,打开工程开始编码.
2.编写步进电机驱动:
1.步进电机驱动框架
本帖使用的是两相4线步进电机,电机采用8拍模式,对步进电机不明白的可以去网上搜索相关资料,这里贴出一篇大家加以参考:https://blog.csdn.net/ff_tt/article/details/78397811
以下是驱动代码,用我自己的风格写的,论坛对代码的排版一般,大家将就看
step_motor.c
  1. #include "stepMotor.h"
  2. #include <stdbool.h>
  3. #include <stdio.h>
  4. #include "rtthread.h"
复制代码
对应的头文件:
  1. #ifndef __STEP_MORTOR_H__
  2. #define __STEP_MORTOR_H__

  3. #include "at32f4xx_gpio.h"
  4. #include "drv_gpio.h"

  5. //typedef struct smotorIO_t{
  6. //        GPIO_Type *port;
  7. //        uint16_t pin;
  8. //        
  9. //}smotorIO;

  10. typedef struct step_motor_t{
  11.         rt_base_t motor_pins[4];
  12.         
  13. }step_motor;




  14. void smotor_init(step_motor *motor);
  15. void smotor_start(int deriction,step_motor *motor);
  16. void smotor_stop(step_motor *motor);


  17. #endif
复制代码
好了我们的步进电机的驱动框架搭完了.
但是可能有同学会问,你这不对啊,你这怎么没有IO口信息呢,哈哈,不要急.
2.电机控制代码
pole.c
  1. #include "pole.h"

  2. //电机IO口定义,可提供多路电机的控制
  3. static pole m_pole[]={
  4.         {
  5.         .motor={
  6.                 .motor_pins={
  7.                
  8.                 GET_PIN(D, 2),
  9.                 GET_PIN(D, 3),
  10.                 GET_PIN(D, 4),
  11.                 GET_PIN(D, 5),        
  12.                 }
  13.         }},
  14.         {.motor={
  15.                 .motor_pins={
  16.                
  17.                 GET_PIN(B, 12),
  18.                 GET_PIN(B, 13),
  19.                 GET_PIN(B, 14),
  20.                 GET_PIN(B, 15),        
  21.                 }
  22.         }}
  23.         
  24.         
  25. };

  26. int pole_num=sizeof(m_pole)/sizeof(pole);


  27. // 注册杆子
  28. int registerPole(){
  29.         
  30.         for(int i=0;i<pole_num;i++){
  31.                 smotor_init(&m_pole[i].motor);
  32.         }
  33.         
  34.         return 0;
  35. }

  36. //获取电机头地址
  37. pole *getPole(){
  38.         return m_pole;
  39. }
复制代码
对应的头文件为:
  1. #ifndef _POLE_H_
  2. #define _POLE_H_

  3. #include <stdio.h>
  4. #include "stepMotor.h"


  5. #define POLE_DERECTION_OPEN                1
  6. #define POLE_DERECTION_CLOSE        0


  7. typedef struct pole_t{
  8.         step_motor motor;
  9.         
  10. }pole;

  11. int registerPole();
  12. pole *getPole();
  13. int poleAction(int direction,pole *pole);




  14. #endif
复制代码
好了,我们的电机实例也做好了,接下来就是测试工作了.
3.主程序代码:
  1. <blockquote>int main(void)
复制代码



3.实验

1.先展示一下我们的电机和驱动模块:



2.将设备连在开发板上就是这样,这里我接了两路电机

3.编译程序,烧录,运行
可以看到由于main函数启动了电机,所以每次上电点击都会运行,所以我们可以用finsh命令行来执行测试
这里,本人给大家贴心准备了两种形式的命令行工具,代码在上面,这里再贴一次:

  1. //finsh指令示例
  2. int funcPoleAction(int direction,int road){
  3. pole *p=getPoleByRoad(road);

  4. if(p){

  5. smotor_start(direction,&p->motor);
  6. }else{
  7. return -1;
  8. }


  9. return 0;

  10. }
  11. FINSH_FUNCTION_EXPORT(funcPoleAction,"finsh pole action!");//导出finsh指令

  12. //cmd指令示例
  13. int cmdPoleAction(int argc, char**argv){
  14. printf("args:%s %s\n",argv[0],argv[1]);

  15. if(argc<3){
  16. printf("invalid arg,usage: cmdPoleAction up|down 0|1|2");
  17. return -2;
  18. }
  19. int road = atoi(argv[2]);
  20. pole *p=getPoleByRoad(road);
  21. if(p){
  22. if(rt_strcmp(argv[1],"up")==0){

  23. poleAction(1,p);
  24. }else if(rt_strcmp(argv[1],"down")==0){
  25. poleAction(0,p);
  26. }else{
  27. printf("invalid arg,please use up or down!");

  28. return -1;
  29. }
  30. }else{

  31. printf("pole road error");
  32. }



  33. return 0;
  34. }

  35. MSH_CMD_EXPORT(cmdPoleAction,"msh pole action");//导出控制台cmd指令
复制代码
打开终端试一下:

可以看到,指令都正确运行了,实际上我们的电机也动了.对应视频稍后上传
4.总结
RTTHREAD的确是一款优秀的rtos系统,本文小试牛刀,使用了rt_device的框架来操作IO口.
下一篇,估计是ds18b02读取温湿度,并显示在LCD1602屏幕上,大家拭目以待
再下一篇,预计是搭载ESP8266模块上个云,然后数据的上传接收这些,慢慢来
目前的规划就写3篇,后续还有没有视时间和精力而定,没错,我就是冲礼品来的嘻嘻
最后,时间仓促,疏漏指出难免,敬请大家回帖指出.



使用特权

评论回复
| 2020-5-22 14:41 | 显示全部楼层
感谢分享,期待您完成作品~

如果使用过程中遇到问题,您可以电话联系板子厂家的客服,或者我们帮您询问一下厂家

小喇叭提醒您:

现在起到6月底,在21ic提交作品(记得把方案文档,作为附件上传),每个人都可以兑换3次礼物。

最晚7月5号以前提交作品哦

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /5 下一条

在线客服 快速回复 返回顶部 返回列表