通过CH340G驱动的Nano ATMEAG328P驱动板初步测试

Posted 卓晴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过CH340G驱动的Nano ATMEAG328P驱动板初步测试相关的知识,希望对你有一定的参考价值。

简 介: 测试了Arduino Nano功能板。特别是在利用Arduino IDE下载程序的时候,需要设置处理器型号为 Old Bootloader,这样可以避免下载程序出错。 后面的实验还测试了如果正确设置Timer2的控制机器使得输出PWM频率在122Hz。利用Arduino的串口监视窗口可以大大提高测试程序与外部程序之间的交互功能。

关键词 ArduinoIDE舵机

 

§01 Nano Arduino 测试板


   TB购买 Nano Arduino开发板 ,另外还有 最新版 Arduino nano V3.0 ATMEGA328P 改进版超级好用 下面对其测试在Arduino IDE使用的基本特性。然后在根据 Arduino Nano开发板原理图PCB 可直接打样 给出对于Nano测试电路板,测试以下两方面内容:

  • 制作兼容的Nano电路板,并下载对应的上载程序;
  • 测试否可以Arduino生成对应的HEX文件,通过MEGA328 Download完成程序下载执行。

1、测试Nano编程

  接入PC之后Nano背面的CH340G会产生USB-SERIAL CH340(COM31)虚拟串口。利用 Arduio软件开发环境搭建 IDE生成测试程序。


▲ 实验使用的Nano测试版

▲ 实验使用的Nano测试版

  根据 Arduino Nano开发板原理图PCB 可直接打样-淘宝网 给出的Nano的 原理,来了解Nano各个引脚的功能。

(1)Nano各个管脚定义


▲ Nano SCH

▲ Nano SCH


▲ USB-CH340G下载电路

▲ USB-CH340G下载电路

(2)Blink LED(D13)

  LED在电路板上占用D13。

【Ⅰ.测试代码】
/*
**==============================================================================
** TEST1.C:             -- by Dr. ZhuoQing, 2021-05-28
**
**==============================================================================
*/
//------------------------------------------------------------------------------
void setup(void) {
    OUT(LED);
}
//------------------------------------------------------------------------------
void loop(void) {
    ON(LED);
    delay(10);
    OFF(LED);
    delay(100);
}
//==============================================================================
//                END OF FILE : TEST1.C
//------------------------------------------------------------------------------
【Ⅱ.测试结果】

  错误: 无论对于测试版设置为 Arduino UNONano,但使用Arduino上载代码出现错误。


▲ 上载程序错误

▲ 上载程序错误

  在 测试版、开发板¥15开发板 中,给出了如下的使用方法是:

  自行下载CH340通用驱动就行了,在Arduino1.8.10版本中,选择 工具,开发板,Arduino Nano,选择端口,处理器里选择Old Bootloader就可以下载例程了。

  因此解决下载问题,需要在处理器中选择 Old Bootloader

▲ 选择处理器:选择不同的Bootloader

▲ 选择处理器:选择不同的Bootloader


▲ 下载新程序的运行版本

▲ 下载新程序的运行版本

2、Nano的主要资源

  1. 12.个数字输入、输出端口D2-D13
  2. 8个模拟输入端口A0-A7
  3. 一对TTLUART : RX/TX
  4. 6个PWM端口,D3,D5,D6,D9,D10,D11
  5. MCU:ATM的a8p-AU
  6. 支持ISP下载。


▲ Nano外形及其管脚

▲ Nano外形及其管脚


▲ Nano的基本参数

▲ Nano的基本参数

 

§02 础测试Nano


1、输出PWM

(1) 测试代码

/*
**==============================================================================
** TEST1.C:             -- by Dr. ZhuoQing, 2021-05-28
**
**==============================================================================
*/
#define ON(pin)                 digitalWrite(pin, HIGH)
#define OFF(pin)                digitalWrite(pin, LOW)
#define VAL(pin)                digitalRead(pin)
#define IN(pin)                 pinMode(pin, INPUT)
#define OUT(pin)                pinMode(pin, OUTPUT)
#define PWM(pin, pwm)           analogWrite(pin, pwm)
#define LED                     13
const int SERVO_MID         = 47;
const int SERVO_LEFT        = 31;
const int SERVO_RIGHT       = 63;
const int servoPin = 3;
void servoSetup(void) {
    pinMode(servoPin, OUTPUT);
    TCCR2B = TCCR2B & B11111000 | B00000110;
    analogWrite(servoPin, SERVO_MID);
}
//------------------------------------------------------------------------------
void setup(void) {
    OUT(LED);
    servoSetup();
}
//------------------------------------------------------------------------------
void loop(void) {
    ON(LED);
    delay(10);
    OFF(LED);
    delay(100);
}
//==============================================================================
//                END OF FILE : TEST1.C
//------------------------------------------------------------------------------

(2)测试结果

  通过测量D3的输出波形,可以看到的对应的输出PWM为122.7Hz,脉宽为1.5ms。


▲ D3输出的波形

▲ D3输出的波形

  是所有FLUKE45 测量D3的直流电压:0.922V。它对应的: V 47 = 47 255 × 5.0 = 0.9216 V V_{47} = {{47} \\over {255}} \\times 5.0 = 0.9216V V47=25547×5.0=0.9216V

2、测试PWM的电压

(1)测试代码

/*
**==============================================================================
** TEST1.C:             -- by Dr. ZhuoQing, 2021-05-28
**
**==============================================================================
*/
#define ON(pin)                 digitalWrite(pin, HIGH)
#define OFF(pin)                digitalWrite(pin, LOW)
#define VAL(pin)                digitalRead(pin)
#define IN(pin)                 pinMode(pin, INPUT)
#define OUT(pin)                pinMode(pin, OUTPUT)
#define PWM(pin, pwm)           analogWrite(pin, pwm)
#define LED                     13
const int SERVO_MID         = 47;
const int SERVO_LEFT        = 31;
const int SERVO_RIGHT       = 63;
const int servoPin = 3;
void servoSetup(void) {
    pinMode(servoPin, OUTPUT);
    TCCR2B = TCCR2B & B11111000 | B00000110;
    analogWrite(servoPin, SERVO_MID);
}
//------------------------------------------------------------------------------
void setup(void) {
    OUT(LED);
    servoSetup();
    Serial.begin(115200);
    Serial.setTimeout(10);
}
//------------------------------------------------------------------------------
int incomingByte= 0;                       // for incoming serial data.
int pwmdata = 0;
char szBuffer[12];
void loop(void) {
    if(Serial.available() > 0) {    
        pwmdata = Serial.parseInt();
        Serial.println(pwmdata);
        PWM(servoPin, pwmdata);
    }
}
//==============================================================================
//                END OF FILE : TEST1.C
//------------------------------------------------------------------------------

(2)串口交互界面

  利用Arduino的串口监视界面输入PWM设定值。


▲ Arduino 的串口监视

▲ Arduino 的串口监视

  利用Python编程测量不同的PWM下输出平均电压之。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# MEAS1.PY                     -- by Dr. ZhuoQing 2021-05-28
#
# Note:
#============================================================
from headm import *
from tsmodule.tsstm32       import *
com_title = "COM31"
outv = []
for i in range(256):
    tspsendwindowkey(com_title, '%d\\r'%i)
    time.sleep(1.5)
    meter = meterval()
    outv.append(meter[0])
plt.plot(outv)
plt.xlabel("PWM")
plt.ylabel("Voltage")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
#        END OF FILE : MEAS1.PY
#============================================================

  window

  下面是测量之后的结果。

▲ PWM平均电压与Duty之间的关系

▲ PWM平均电压与Duty之间的关系

3、测试舵机

  手边有一款来自于北京科宇的大角度输出舵机,利用Arduino输出的PWM波形测试该款舵机转角输出的范围。

▲ 输出脉冲信号控制舵机旋转

▲ 输出脉冲信号控制舵机旋转

  从测量的结果来看,舵机的输出较大大约为270°

 

验总结 ※


  于Arduino Nano使用的时候,需要注意选择Nano的处理器的时候,应该选择 Old Bootloader 。否则就会出现上载程序出错的问题。

  这个结论是在 测试板 开发板 开发套件 其它 新版 Arduino nano V3.0 ATMEGA328P 改进版超级好用 送USB线 中给出的提示:

自行下载CH340通用驱动就行了,在Arduino1.8.10版本中,选择 工具,开发板,Arduino Nano,选择端口,处理器里选择Old Bootloader就可以下载例程了。

  测试了利用Arduino驱动舵机的情况。需要对于Timer2控制字进行设置,使得输出的频率为122Hz左右。否则缺省情况下,输出的PWM频率为495Hz,不适合驱动舵机。

TCCR2B = TCCR2B & B11111000 | B00000110;

  利用Arduino IDE中的串口监视串口(利用ctrl+shift+m)可以对ArduinoSerial.print() 函数输出进行显示。此外利用Serial.parseInt()以及相关的函数对于从串口监视串口送入的字符进行解析。利用这种方法可以构建自动测量系统。

 


■ 相关文献链接:

○ 相关图表链接:

以上是关于通过CH340G驱动的Nano ATMEAG328P驱动板初步测试的主要内容,如果未能解决你的问题,请参考以下文章

增加ATMEGA328 实验电路板对外引脚

CH340G版USB转串口自动下载器原理图

SSCOM32串口调试工具用CH340G转换芯片,CH340G断电后重新开机,串口工具不能工作了

CH340g使用说明详解

arduinonanol灯频闪,程序没运行

USB转串口芯片CH340G的使用,3.3V或5V供电电路