多语言展示
当前在线:1850今日阅读:86今日分享:14

Arduino单片机的Proteus仿真项目实例

下面给大家介绍一个Arduino单片机的Proteus仿真项目实例:
工具/原料
1

电脑

2

Arduino

3

Proteus仿真软件

方法/步骤
1

这个仿真项目实例的任务是:分别按下K1(正转)按钮、K2(反转)按钮和K3(停止)按钮,直流电机会分别产生相应的动作,而且当调节电位计时,电机的转速也随之发生变化。

2

电气符号用到了芯片元件、电源终端、虚拟仪器和连线标号,它们分别从各自的模式库中提取出来。

3

仿真图中,电源终端用到了VCC电源与接地符号,虚拟仪器用到了四通道示波器和直流电压表,连线标号的作用是相同连线标号的两根线在电气意义上是相连的,如图8中的标号A、B和PWM。至于芯片元件,仿真图里用到了电阻、电容、CPU、晶振、直流电机、稳压管、L298N驱动等等,芯片元件的提取通常有两种方法,父、子类别检索方法和关键字查询法。    父、子类别检索方法是:先选择元件模式库,再点击“P”按钮,打开元件查询提取对话框,如图10所示,例如提取的元件是单片机芯片ATMEGA328P,先在类别里找到Microprocessor ICs,在子类别里找到AVR Family,再在制造商里找到Atmel,然后在缩小了寻找范围的结果中找到这个单片机芯片ATMEGA328P,找到后双击芯片,就可以把芯片提取到ISIS界面左侧的DEVICES栏中,供原理图绘制时随时选用

4

关键字查询法是:如果事先知道要提取的元件名称,可以在元件查询提取对话框左上方的关键字输入栏里输入元件名称,如搜寻motor元件,直接输入motor,回车后,在结果中可以很容易地找到所需元件。

5

把硬件线路绘制完成,剩下的事就是编写程序,编译仿真了,我设计的这个仿真项目正好把数字量和模拟量输入输出都涉及到了,按钮输入和驱动芯片L298N的电机转向控制端A、B是数字量输入输出,电位计输入和L298N的转速调节控制端PWM是模拟量输入输出。数字量输入输出的Arduino命令分别是digitalRead(数字端口号)和digitalWrite(数字端口号,LOW或HIGH);模拟量输入输出的Arduino命令是analogRead(模拟端口号)和analogWrite(数字端口号, 0~255)。模拟端口只有输入模式,没有输出模式,Arduino模拟量输出是以PWM信号形式从具有PWM输出功能的数字端口输出的。Arduino微控制器的数字端口和模拟端口与ATMEGA 328芯片引脚的对应关系图如下。标有0~13标号的引脚对应的是数字端口,在0~13前面有符号“~”的引脚对应的端口具有PWM输出功能。标有A0~A5标号的是模拟端口。

6

Arduino UNO端口与Atmega328P引脚对应图有了Arduino UNO端口与Atmega328P引脚对应图,就可以方便地利用Proteus硬件仿真图,有针对性地编写Arduino程序了。由于以下程序中有详细的注释,所以对每行Arduino程序的作用就不再累述了。Arduino程序://任务:通过按钮控制电机启停和正反转,通过电位计调节电机转速。int K1=5;  //把K1(正转)按钮连在数字端口5int K2=6;  //把K2(反转)按钮连在数字端口6int K3=7;  //把K3(停止)按钮连在数字端口7int potpin = 3; // 把电位计连在模拟端口3int A=2;   //数字端口2、3控制电机启停和转向int B=3;  int PWMpin = 9; // 数字端口9输出PWM信号,控制电机转速//初始化void setup() {   pinMode(K1,INPUT);//把数字端口5、6、7设置输入模式   pinMode(K2,INPUT);   pinMode(K2,INPUT);   pinMode(A,OUTPUT);//把数字端口2、3设置输入模式   pinMode(B,OUTPUT);}//主程序void loop() {   //如果按下K1(正转)按钮  if(digitalRead(K1)==LOW)  {    //电机正转    digitalWrite(A,HIGH);    digitalWrite(B,LOW);  }  //如果按下K2(反转)按钮  if(digitalRead(K2)==LOW)  {    //电机反转    digitalWrite(A,LOW);    digitalWrite(B,HIGH);  }  //如果按下K3(停止)按钮  if(digitalRead(K3)==LOW)  {    //电机停止    digitalWrite(A,LOW);    digitalWrite(B,LOW);  }  int sensorValue = analogRead(potpin); //读取电位计采样值       sensorValue = sensorValue/4; // 采样值 0-1024 转换为 0-255  analogWrite(PWMpin, sensorValue);//把处理后的转换值以PWM信号形式输出  delay(20);//延时}

推荐信息