找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2858|回复: 4
收起左侧

基于LPC单片机的电磁循迹小车代码

[复制链接]
ID:724905 发表于 2020-11-7 16:53 | 显示全部楼层 |阅读模式
本帖最后由 恒星撒旦 于 2020-11-7 17:32 编辑

之前校赛做的题目。
主控单片机为LPC546,程序实现功能为室内电磁循迹具体代码注释的很详细,一看就能明白,实际循迹效果还不错,有十字,坡道,环岛等处理方式。
分享给大家,有问题可以留言。
小车如下:
单片机源程序如下:
  1. //* @changed by ZZH ZHY DZH
  2. /*
  3. 接口定义:

  4. 摄像头             单片机接口
  5. D0-D7数据口        B24 B25 B26 B27 B28 B29 B30 B31
  6. SDA                A9   F5
  7. SCL                A8
  8. 场信号             A0
  9. 像素信号           A1

  10. 运放
  11. 通道1              A10
  12. 通道2              A15
  13. 通道3              A16
  14. 通道4              A31
  15. 通道5              B0
  16. 通道6              A23

  17. IIC                 
  18. SDA                A13 F1
  19. SCL                A14

  20. 电机PWM
  21. PWM1               A18   T1
  22. PWM2               A20
  23. PWM3               B4   T2
  24. PWM4               B5

  25. 编码器         
  26. LSB1               A2   T0
  27. DIR                A3
  28. LSB2               A4  T3
  29. DIR                A5


  30. 舵机   
  31. PWM                A6 T4

  32. OLED/TFT
  33. SCK                B19
  34. MOSI               B21
  35. MISO               B20      液晶没有这个引脚  但是SPI会占用这个引脚
  36. CS                 B9 F4

  37. DC                 B10
  38. RES                B8
  39. BL                 B7

  40. UART               
  41. RX                 A24
  42. TX                 A25  

  43. 按键   
  44. B1 B2 B3 B23任意交换  


  45. 拨码开关               
  46. B17  B22任意交换  

  47. NRF
  48. B15 B14 A29 A22 A21 A17        任意交换  

  49. */


  50. //打开新的工程或者工程移动了位置务必执行以下操作
  51. //第一步 关闭上面所有打开的文件
  52. //第二步 project  clean  等待下方进度条走完

  53. #include "headfile.h"
  54. #include "LPC546XX_adc.h"
  55. #include "LYG_motor.h"
  56. #include "LYG_direction.h"
  57. #include "LYG_mspeed.h"
  58. #include "LYG_keyboard.h"
  59. #include "LYG_mohu.h"
  60. #include "SEEKFREE_ICM20602.h"
  61. #include "LPC546XX_spi.h"
  62. #include "LPC546XX_mrt.h"
  63. #include "LYG_chaoshengbo.h"

  64. #define TRIG_PIN1 B6                //定义超声波触发引脚端口
  65. #define ECHO_PIN1 B4                //定义超声波触发引脚端口

  66. uint16 speed0,speed1,speed2,speed3,speed4,speed5;                          //直道  弯道  坡道  路障
  67. uint16 read_ZHI[6];       //eeprom储存的最大电感值
  68. extern float  AD_MAX_Data1[6];
  69. uint16   duoji_zz;
  70. uint32 speeds;
  71. extern int16 Turn_PID ;
  72. extern int16 Offset;
  73. uint16 huandao[8];
  74. extern int16 D_error ;
  75. extern uint16 ad_03_he;
  76. extern uint16 time;
  77. extern int16 speedl,AD_SS0[3],AD_SS1[3],AD_SS2[3],AD_SS3[3],AD_SS4[3],AD_SS5[3];
  78. extern uint8 flag_dawan;
  79. extern uint32 distance1;
  80. extern int16 Turn_PID ;
  81. uint16 shizi1[2];
  82. uint16 zhijiao1[2];
  83. uint16 benzenedao[2];

  84. extern uint8 con,fangxiangshu;
  85. uint8 xuanze,xuanze1;

  86. int main(void)
  87. {   
  88.     get_clk();
  89.     oled_init();
  90.     eeprom_init();
  91.     motor_init();
  92.     duoji_init();
  93.     mspeed_init();
  94.     //chaoshengbo_init();
  95.     //uart_init(USART_0,115200,UART0_TX_A25,UART0_RX_A24);  //蓝牙
  96.     //icm20602_init_spi();                                   //陀螺仪
  97.     //spi_init(SPI_NUM,SPI_CS_PIN,SPI_SCK_PIN,SPI_MOSI_PIN,SPI_MISO_PIN,3,10*1000*1000);
  98.     //gpio_init(A8,GPI,1,NOPULL);  
  99.    
  100.    // gpio_init(TRIG_PIN1,GPO,0,NOPULL);//超声波
  101.    
  102.    
  103.    
  104.     adc_init(ADC1);
  105.     adc_init(ADC2);
  106.     adc_init(ADC3);
  107.     adc_init(ADC4);
  108.     adc_init(ADC5);
  109.     adc_init(ADC6);
  110.     huandao[0]=EEPROM_READ_WORD(11);   // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  111.     huandao[1]=EEPROM_READ_WORD(12);
  112.     huandao[2]=EEPROM_READ_WORD(13);
  113.     huandao[3]=EEPROM_READ_WORD(14);
  114.     huandao[4]=EEPROM_READ_WORD(15);
  115.     huandao[5]=EEPROM_READ_WORD(16);
  116.     huandao[6]=EEPROM_READ_WORD(20);
  117.     huandao[7]=EEPROM_READ_WORD(21);
  118.     benzenedao[0]=EEPROM_READ_WORD(25);
  119.     benzenedao[1]=EEPROM_READ_WORD(26);
  120.     shizi1[0]=EEPROM_READ_WORD(10);
  121.     shizi1[1]=EEPROM_READ_WORD(22);
  122.     zhijiao1[0]=EEPROM_READ_WORD(23);
  123.     zhijiao1[1]=EEPROM_READ_WORD(24);
  124.     fangxiangshu=EEPROM_READ_WORD(30);
  125.     //duoji_zz=EEPROM_READ_WORD(9);
  126.     duoji_zz=779;
  127.     speed0=EEPROM_READ_WORD(5);
  128.     speed1=EEPROM_READ_WORD(6);
  129.     speed2=EEPROM_READ_WORD(7);
  130.     speed3=EEPROM_READ_WORD(8);
  131.     speed4=EEPROM_READ_WORD(27);
  132.     speed5=EEPROM_READ_WORD(28);
  133.     read_ZHI[0]=EEPROM_READ_WORD(1);
  134.     read_ZHI[1]=EEPROM_READ_WORD(2);
  135.     read_ZHI[2]=EEPROM_READ_WORD(3);
  136.     read_ZHI[3]=EEPROM_READ_WORD(4);
  137.     read_ZHI[4]=EEPROM_READ_WORD(17);
  138.     read_ZHI[5]=EEPROM_READ_WORD(18);
  139.     con=EEPROM_READ_WORD(29);
  140.     xuanze=EEPROM_READ_WORD(19);
  141.     xuanze1=EEPROM_READ_WORD(31);

  142.     AD_MAX_Data1[0] = (read_ZHI[0]/10)/10.0;
  143.     AD_MAX_Data1[1] = (read_ZHI[1]/10)/10.0;
  144.     AD_MAX_Data1[2] = (read_ZHI[2]/10)/10.0;
  145.     AD_MAX_Data1[3] = (read_ZHI[3]/10)/10.0;
  146.     AD_MAX_Data1[4] = (read_ZHI[4]/10)/10.0;
  147.     AD_MAX_Data1[5] = (read_ZHI[5]/10)/10.0;

  148.    
  149.     systick_delay_ms(500);   //防止上电标志置位
  150.    
  151.     //pint_init(PINT_CH0,ECHO_PIN1,FALLING); //超声波
  152.     //set_irq_priority(PIN_INT0_IRQn,0);//设置优先级 越低优先级越高
  153.     //enable_irq(PIN_INT0_IRQn);//开中断 PIN_INT0_IRQn - PIN_INT7_IRQn
  154.    
  155.     pint_init(PINT_CH1,B12,RISING);//霍尔停车
  156.     set_irq_priority(PIN_INT1_IRQn,1);
  157.     enable_irq(PIN_INT1_IRQn);
  158.    
  159.     //pint_init(PINT_CH2,A8,RISING);//激光避障
  160.     //set_irq_priority(PIN_INT2_IRQn,2);
  161.     //enable_irq(PIN_INT2_IRQn);
  162.    
  163.     // pint_init(PINT_CH1,A8,FALLING); //引脚中断停车
  164.     // pint_enable_irq(PINT_CH1);  //开启引脚中断
  165.    // EnableInterrupts;
  166.    
  167.     pit_init_ms(5);    //周期定时器
  168.     enable_irq(RIT_IRQn);
  169.     //mrt_pit_init_ms(MRT_CH0,5);
  170.    // enable_irq(MRT0_IRQn);
  171.     EnableInterrupts;
  172.    
  173.   // mrt_start(MRT_CH1);
  174.     while(1)
  175.     {
  176.      // OLED_ConfigParameter();                  //菜单  //yihuigai
  177.      // data_conversion(AD_Norm[0],AD_Norm[3],AD_Norm[4],AD_Norm[5],virtual_scope_data);//蓝牙传输数据

  178.         oled_p6x8str(0,1,"ADCl :");  oled_printf_int32(6*8,1,AD_Norm[0],4);
  179.         //oled_p6x8str(0,2,"ADC2 :");  oled_printf_int32(6*8,2,AD_SS1[2],3);
  180.         //oled_p6x8str(0,3,"ADC3 :");  oled_printf_int32(6*8,3,AD_SS2[2],3);
  181.         oled_p6x8str(0,3,"ADCr :");  oled_printf_int32(6*8,3,AD_Norm[3],4);
  182.         oled_p6x8str(0,5,"D :");  oled_printf_int32(6*8,5,Turn_PID,4);
  183.          ctimer_pwm_duty(TIMER1_PWMCH0_A18,2000 );
  184.          ctimer_pwm_duty(TIMER2_PWMCH1_B4, 2000 );
  185.          
  186.       //  oled_p6x8str(0,4,"Offset :");  oled_printf_int32(6*8,4,Offset,3);
  187.         //oled_p6x8str(0,4,"turn :");  oled_printf_int32(6*8,4,Turn_PID,3);
  188.         
  189.       
  190.         
  191.       //chaoshengboZF();
  192.     }
  193.    
  194.    
  195.         
  196.    
  197. }
复制代码




Tortoise 1.7z

193.01 KB, 下载次数: 7, 下载积分: 黑币 -5

回复

使用道具 举报

ID:1 发表于 2020-11-7 17:00 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:724905 发表于 2020-11-7 17:37 | 显示全部楼层
3BX1(7VTCCPV%D(JE{987[K.png 小车如图
回复

使用道具 举报

ID:724905 发表于 2020-11-7 17:40 | 显示全部楼层
12.png
回复

使用道具 举报

ID:780742 发表于 2021-3-18 23:35 | 显示全部楼层
楼主的电磁传感器是使用的什么传感器呢?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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