请选择 进入手机版 | 继续访问电脑版
搜索
查看: 179|回复: 7

[原创] 让车轮转起来

[复制链接]
  • TA的每日心情
    慵懒
    2016-12-12 08:39
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    112

    主题

    1108

    帖子

    3625

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    3625
    发表于 2017-10-12 08:59:00 | 显示全部楼层 |阅读模式
    本帖最后由 jinglixixi 于 2017-10-12 09:14 编辑

        在上一篇已构建起了平衡小车的供电体系,这次的任务则是让车轮先转起来,从而为后续设计提供可靠的基础,此次实验的电路构成如图1所示。主要任务是通过K2K3来控制一路电机的正反转,并以LED0LED2来指示正反转的状态。
    图片1.png
    1实验电路构成

          此外,可通过K0K1键的引脚来引入电机编码器的计数脉冲,从而来验证脉冲输出引脚C1C2的单周脉冲数,为转速检测提供依据。
          单侧电机控制的实验效果如图2所示,其控制信号是由P0.12P0.14来输出,经驱动模块的OUT3OUT4来控制电机的转动及方向。
    图片2.png
    2 单侧电机控制效果

          至此,证明电机的控制体系是有效的,后续会对相关的传感器进行功能检测以便进行姿态的控制和调整。待机械结构组装后,即可进行整体的功能调试与验证。

          与之相关的程序如下:
    #define BOARD_LED_GPIO_PORT BOARD_LED_RED_GPIO_PORT
    #define BOARD_LED_GPIO_PIN BOARD_LED_RED_GPIO_PIN

    #define KEY_GPIO_CFG IOCON_MODE_PULLUP | IOCON_FUNC0 | IOCON_GPIO_MODE | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF
    #define KEY_NUM 4

    const uint8_t  KEY_GPIO_PORT[KEY_NUM] = { 1,  1,  1,  1 };
    const uint8_t  KEY_GPIO_PIN [KEY_NUM] = { 8,  9,  10,  11 };

    //按键初始化函数
    1. void key_init(void)
    2. {
    3. CLOCK_EnableClock(kCLOCK_Gpio1);
    4. GPIO_PinInit(GPIO, 1, 8, kGPIO_DigitalInput);
    5. GPIO_PinInit(GPIO, 1, 9, kGPIO_DigitalInput);
    6. GPIO_PinInit(GPIO, 1, 10, kGPIO_DigitalInput);
    7. GPIO_PinInit(GPIO, 1, 11, kGPIO_DigitalInput);        
    8. }
    复制代码
    //电机控制与指示初始化函数
    1. void modor_init(void)
    2. {
    3. CLOCK_EnableClock(kCLOCK_Gpio0);
    4. gpio_pin_config_t moder_config = {  kGPIO_DigitalOutput, 0,};
    5. GPIO_PinInit(GPIO, 0, 12, &moder_config);
    6. GPIO_PinInit(GPIO, 0, 14, &moder_config);
    7. GPIO_PinInit(GPIO, 0, 15, &moder_config);
    8. GPIO_PinInit(GPIO, 0, 21, &moder_config);        
    9.         
    10. GPIO_WritePinOutput(GPIO, 0U, 12U, 0);
    11. GPIO_WritePinOutput(GPIO, 0U, 14U, 0);
    12. GPIO_WritePinOutput(GPIO, 0U, 15U, 0);
    13. GPIO_WritePinOutput(GPIO, 0U, 21U, 0);
    14. }
    复制代码
    //读取键值函数
    1. uint8_t key_value(uint8_t num)
    2. {
    3.         return GPIO_ReadPinInput(GPIO, KEY_GPIO_PORT[num], KEY_GPIO_PIN[num]);
    4. }
    复制代码
    //测试主函数
    1. int main(void)
    2. {
    3.         int n;
    4.         /* Init board hardware. */
    5.         /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
    6.         CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

    7.         BOARD_InitPins();
    8.         BOARD_BootClockHSRUN();
    9.         BOARD_InitDebugConsole();
    10.                
    11.         SystemCoreClockUpdate();
    12.         SysTick_Config(SystemCoreClock/1000);
    13.         
    14.         modor_init();
    15.         key_init();
    16.         OLED_Init();                                   //  OLED 屏初始化
    17.         OLED_Clear();
    18.         OLED_ShowString(0,6,"num:",16);     //  脉冲计数检测
    19.         OLED_ShowNum(48,6,n,3,16);
    20.         while(1)
    21.         {    //引入脉冲计数功能
    22.                  if(key_value(0) == 0)
    23.                  {
    24.                                 while(key_value(0)==0);
    25.                                 n++;    //左转
    26.                  }
    27.                  if(key_value(1) == 0)
    28.                  {
    29.                                 while(key_value(1)==0);
    30.                                 n--;    //右转
    31.                  }     
    32.                
    复制代码
        就目前情况看,板上资源对GPIO口的占用是较严重的,要想兼顾OLED屏显示、转速脉冲检测、电机控制、无线通讯、超声波测距及6轴传感器检测等GPIO口资源是难以满足要求的,只能在分步调试时使用一些器件,待完成验证后再去除以省出GPIO口。似乎让LPC54114开发板在平衡小车中充当控制板有些欠妥,它的板载资源被埋没了,又影响了平衡小车对其资源的要求。目前看只能在模拟口上再做做文章了!


    回复

    使用道具 举报

  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    1

    主题

    79

    帖子

    231

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    231
    发表于 2017-10-12 09:03:17 | 显示全部楼层
    社会 社会
    回复

    使用道具 举报

  • TA的每日心情

    昨天 10:15
  • 签到天数: 59 天

    [LV.5]常住居民I

    8

    主题

    221

    帖子

    604

    积分

    高级会员

    Rank: 4

    积分
    604
    发表于 2017-10-12 09:04:58 | 显示全部楼层
    厉害!!
    学习下.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-12-12 08:39
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    112

    主题

    1108

    帖子

    3625

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    3625
     楼主| 发表于 2017-10-12 09:15:44 | 显示全部楼层
    本帖最后由 jinglixixi 于 2017-10-12 09:19 编辑

    怪事代码显示不全,只好再续上。
    1. if(key_value(2) == 0)
    2. {
    3.   while(key_value(2)==0);//向前
    4.   GPIO_WritePinOutput(GPIO, 0U, 15U, 1);// 方向指示
    5.   GPIO_WritePinOutput(GPIO, 0U, 21U, 0);
    6.   GPIO_WritePinOutput(GPIO, 0U, 12U, 1);//方向控制
    7.   GPIO_WritePinOutput(GPIO, 0U, 14U, 0);
    8. }
    9. if(key_value(3) == 0)
    10. {
    11.   while(key_value(3)==0);//向后
    12.   GPIO_WritePinOutput(GPIO, 0U, 15U, 0);//方向指示
    13.   GPIO_WritePinOutput(GPIO, 0U, 21U, 1);
    14.   GPIO_WritePinOutput(GPIO, 0U, 12U, 0);//方向控制
    15.   GPIO_WritePinOutput(GPIO, 0U, 14U, 1);
    16. }
    17.   OLED_ShowNum(48,6,n,3,16);
    18. }
    19. }
    复制代码


    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 10:25
  • 签到天数: 41 天

    [LV.5]常住居民I

    3

    主题

    92

    帖子

    301

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    301
    发表于 2017-10-12 09:47:20 | 显示全部楼层
    电机驱动模块 叫啥名字
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 244 天

    [LV.8]以坛为家I

    24

    主题

    876

    帖子

    2303

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    2303
    发表于 2017-10-12 20:53:58 | 显示全部楼层
    wowocpp 发表于 2017-10-12 09:47
    电机驱动模块 叫啥名字

    貌似L298N,谢谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-3-6 21:30
  • 签到天数: 57 天

    [LV.5]常住居民I

    2

    主题

    148

    帖子

    460

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    460
    发表于 2017-10-12 21:31:18 | 显示全部楼层
    厉害厉害
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-12-12 08:39
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    112

    主题

    1108

    帖子

    3625

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    3625
     楼主| 发表于 2017-10-13 09:04:27 | 显示全部楼层
    leo121_3006061 发表于 2017-10-12 20:53
    貌似L298N,谢谢楼主分享

    的确是L298N,在前一贴已做过介绍。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区    

    GMT+8, 2017-10-23 03:03 , Processed in 0.177384 second(s), 14 queries , Memcache On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表