标题:
基于90c52单片机的电磁小车程序设计
[打印本页]
作者:
5156468418941
时间:
2018-12-20 16:43
标题:
基于90c52单片机的电磁小车程序设计
该设计是基于90c52单片机的电磁寻迹小车。搭好硬件后(包括两个直流电机,一个万向轮,传感器(电感)及其支架 )。将小车放在通电的导线上传感器与通电导线电磁感应产生电动势,经过放大电路将微弱的信号放大后。再由单片机内部的ad读取数据。分析数据在决定小车的方向.
具体的实现过程如下:
1.假设在小车的左右两端各有1个电感并且经过放大电路后ad采集到的值分别为a和b。
2.电机的运转快慢由定时器产生的pwm信号来控制,假设左右两个电机的初始pwm为20,最高为100。
3.我们知道电势的高低和传感器离通电导线的距离有关,距离越远得到的值越小,反之越高。最理想的状态是小车一直在导线的中间走。也就是两个电感的值相同。此时可以通过所得到的电感值算出小车的一个相对的位置 p=a-b/c 这只是一个最基本的式子具体还要根据自己实际所得的ad值来做调整。根据所得到的这个相对位置的值再来调整左边或者右边电机的pwm值。如果p>大于0,说明左边的电感值大于右边也就是说左边的电感距离通电导线近,就应该左转,反之右转。
4.转弯的方法第一可以保持一边电机的pwm不变降低另一边的pwm的值,第二可以保持一边电机的pwm不变提高另一边的pwm的值
本设计已经过测试确实可行由于时间仓促还有很多地方需要完善,见谅!!
单片机源程序如下:
#include "max7219.h"
unsigned char dis_code[18]={0x7E,0x30,0x6D,0x79, // 0, 1, 2, 3
0x33,0x5B,0x5F,0x70,0x7F,0x7B,0x77,0x1f,0x4e,0x3d,0x4f,0x47,0x01,0x00};// 4, 5, 6, 7, 8, 9,a,b,c,d,e,f,-, ,
void Write_Max7219_byte(unsigned char temp)
{
unsigned char i;
for (i=0;i<8;i++)
{
MAX7219_CLK0; // CLK=0;
if((temp>>7)&0x1)
{
MAX7219_DIN1;
}
else
{
MAX7219_DIN0;
}
//DIN=((temp>>7)&0x1);
temp<<=1;
MAX7219_CLK1;//CLK=1;
}
}
void Write_Max7219(unsigned char address,unsigned char dat)
{
MAX7219_CS0;//MAX_LOAD=0;
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
MAX7219_CS1;//MAX_LOAD=1;
}
void clear(void)
{
Write_Max7219(1,0x00);
Write_Max7219(2,0x00);
Write_Max7219(3,0x00);
Write_Max7219(4,0x00);
Write_Max7219(5,0x00);
Write_Max7219(6,0x00);
Write_Max7219(7,0x00);
Write_Max7219(8,0x00);
}
//void Max7219_port(void)
//{
//
// GPIO_InitTypeDef GPIO_InitStructure;
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
// GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2 ;
// GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
// GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
// GPIO_Init(GPIOB,&GPIO_InitStructure);
//// RCC->APB2ENR|=1<<2;
////
//// GPIOA->CRL&=0X0F00FFFF;
//// GPIOA->CRL|=0X30330000;//PA2 推挽输出
//// GPIOA->ODR|=1<<4; //PA2 输出高
//// GPIOA->ODR|=1<<5; //PA2 输出高
//// GPIOA->ODR|=1<<7; //PA2 输出高
////
//}
void Init_Max7219(void)
{
Write_Max7219(SHUT_DOWN, 0x00); //Normal Operation XXXXXXX1 Shutdown Mode XXXXXXXX0
Write_Max7219(DECODE_MODE, 0x00); //Decode Mode Select D7~D0 1 B decode 0 No decode
Write_Max7219(SCAN_LIMIT, 0x07); //SCAN LIMIT 0~7 0xX0~0xX7
Write_Max7219(INTENSITY, 0x0A); //Set Intensity 0xX0~0xXf
Write_Max7219(DISPLAY_TEST, 0x00); //Normal Operation XXXXXXX0 Display Test Mode
Write_Max7219(SHUT_DOWN, 0x01); //Normal Operation XXXXXXX1 Shutdown Mode XXXXXXXX0
clear();
}
void TestLED(void)
{
Write_Max7219(1,dis_code[0]);
Write_Max7219(2,dis_code[1]);
Write_Max7219(3,dis_code[2]);
Write_Max7219(4,dis_code[3]);
Write_Max7219(5,dis_code[4]);
Write_Max7219(6,dis_code[5]);
Write_Max7219(7,dis_code[6]);
Write_Max7219(8,dis_code[7]);
}
void LED(unsigned char position ,unsigned char Value)
{
Write_Max7219(position,dis_code[Value]);
}
void display(int num,int num1 )
{
char temp;
temp = num/1000;
LED(8 ,temp);
temp = num%1000/100;
LED(7 ,temp);
temp = num%100/10;
LED(6 ,temp);
temp = num%10;
LED(5 ,temp);
temp = num1/1000;
LED(4 ,temp);
temp = num1%1000/100;
LED(3 ,temp);
temp = num1%100/10;
LED(2 ,temp);
temp = num1%10;
LED(1 ,temp);
}
复制代码
所有资料51hei提供下载:
基于90c52单片机的电磁小车.rar
(127.24 KB, 下载次数: 14)
2018-12-20 16:41 上传
点击文件名下载附件
寻迹小车
下载积分: 黑币 -5
作者:
admin
时间:
2018-12-21 01:24
补全原理图或者详细说明一下电路连接即可获得100+黑币
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1