|  | 
 
| 材料: 霍尔传感器3503  1个;
 MEGA16最小系统一块;
 电磁铁 1个;
 强磁铁  3个;
 298驱动 1块;
 12V  电源1个;
 10欧姆10瓦水泥电阻 2个;
 
 说明:
 mega16的AD是10位的,但我只用了8位。
 电磁铁内阻8欧姆左右。。。。。。我绕了很多圈但内阻还是偏小,应该是线太粗了的原因,建议大家用稍微细一点的漆包线。
 298驱动是我们实验室一个师兄画的板子,加了文雅芯片,可以输出5V给单片机供电。
 水泥电阻的作用是限流,两个并联的。
 
 程序:
 #ifndef ADC_H
 #define ADC_H
 
 #define        FILMASK                 3
 #define        FILNUM                 4
 #define        WARP(X)                X=((X+1)&FILMASK)
 uchar FilterBuf[FILNUM];
 uchar Dx=0;
 uchar AdValue;
 uchar Filter(uchar * value);
 void delayms(uint i)
 {
 uint j;
 while(i--)
 {
 for(j=0;j<30;j++);//至少20才能让ADC比较正常
 }
 }
 void ADC_init()
 {
 ADMUX=0X60;
 ADCSRA=0X87;
 }
 uint get_adc(uchar channel)
 {
 uint a=0,b=0;
 uchar c;
 c=0x60+channel;
 ADMUX=c;
 delayms(1);
 while(!(c==ADMUX));
 ADCSRA|=0X40;
 while(!(ADCSRA&0X10));
 a=ADCL;
 b=ADCH;
 ADCH=0x00;
 ADCL=0x00;
 ADCSRA&=0Xef;
 
 return b;
 }
 /*---------------------------------------------------------------------------
 
 ---------------------------------------------------------------------------*/
 void getdata()
 {
 AdValue=get_adc(1);
 FilterBuf[WARP(Dx)]=AdValue;
 AdValue=Filter(FilterBuf);
 }
 uchar Filter(uchar * value)
 {
 uchar i;
 uint   tt=0;
 for(i=0;i<FILNUM;i++)
 {
 tt +=value;
 }
 return tt/FILNUM;
 }
 #endif
 
 
 #include<iom16v.h>
 #include<macros.h>
 #include"12864.h"
 #include"INIT.h"
 #include"ADC.h"
 #define uint unsigned int
 #define uchar unsigned char
 int ads,m;
 int kp=3;ki=0,kd=37;
 int temp=0;
 
 int pid(int input)
 {
 //输入范围:
 //输出范围:
 static int n1,n2,n3,res;
 //int res;
 n1=input-159;
 //n1=n1*n1;
 res=22+kp*n1*n1/153+(n1-n2)*kd;
 n3=n2;
 n2=n1;
 
 return res;
 }
 
 void main(void)
 {
 ADC_init();
 IO_init();
 LCD_init();
 PORTB&=~0x01;
 PORTB|=0x02;
 Delay_ms(200);
 display_map(QQ);
 Delay_ms(20000);
 LCD_Clr_All();
 while(1)
 {
 getdata();
 //LCD_Num_Str_Disp(6,2,AdValue);
 //if(temp>0) LCD_Num_Str_Disp(6,1,temp);
 //else LCD_Num_Str_Disp(6,1,-temp);
 DDRD|=0X30;
 
 TCCR1A=0X63;
 TCCR1B=0X1B;
 /*if(AD[1]>140)
 {
 m=AD[1]-140;
 }
 else
 {
 m=0;
 }*/
 OCR1A=99;
 
 temp=pid(AdValue);
 if(temp>99)temp=99;
 if(temp<0)temp=0;
 
 OCR1B=temp;
 
 //QF;
 }
 }
 
 
 
 
 
 
 
 
 .[img=0,1]file:///C:\Users\leixiaofeng\Documents\Tencent Files\971203419\Image\C2C\@P[KDGY{8[XV}]0GICLDBB3.jpg[/img][img=0,1]file:///C:\Users\leixiaofeng\Documents\Tencent Files\971203419\Image\C2C\@P[KDGY{8[XV}]0GICLDBB3.jpg[/img][img=0,1]file:///C:\Users\leixiaofeng\Documents\Tencent Files\971203419\Image\C2C\@P[KDGY{8[XV}]0GICLDBB3.jpg[/img]
 (原文件名:psb.jpg)
 
 .
 (原文件名:psb (1).jpg)
 
 .
 (原文件名:psb (2).jpg)
 
 .
 (原文件名:psb (3).jpg)
 
 .
 (原文件名:psb (4).jpg)
 
 感谢DO实验室的各位大哥们的帮助。
 悬浮得不是很稳,还望坛里的大虾们批评指正。
 
 
 最近在网上看到的一个外国的磁悬浮套件,模拟上拉的,特别惊奇他只用了几个原件
 .
 网上看到的外国的一个磁悬浮套件 (原文件名:Assembled Board.jpg)
 
 .
 
 | 
 |