02_OpenCM9-04硬件介绍

小芽科技 2021-12-07 10:35:01
Categories: Tags:

OpenCM9.04硬件

内存映射

img

框架

OpenCM9.04的框架图如下所示。OpenCM9.04的原理图基于32位Cortex-M3核心STM32F103CB微控制器。

电源原理图设计为通过5V和3.3V调节器级联。5V电压提供给TTL总线,3.3V电压提供给微控制器、5针端口和4针通信端口。

OpenCM9.04支持USB2.0 Micro-B连接器用于下载程序或执行数据通信。

引脚11(TX1)和引脚12(RX1)不能同时使用,因为引脚11和引脚12属于USART通道1,而该通道已分配给Dynamixel TTL总线。

img

管脚布局

img

电源开关

电源开关用于控制电路板的电源和DYNAMIXEL电源的开关。(注意:连接USB电缆时,电路板始终通电。)

串行电池插座

连接两节LBS-04 锂电池。(适用于XL-320舵机供电,当然,用其他符合舵机电压标准的电源也是可以的)

警告:当电池连接到电路板时,不要给电池充电,会导致短路。在给电池充电时,务必断开与电路板的连接。

DYNAMIXEL TTL 3 PIN管脚

用于3pin TTL接口的舵机(DYNAMIXEL TTL 总线)。

通信接口

外围设备使用有线/无线的方式进行通信 (比如BT-410, BT-210, BT-110A, ZIG-110A, LN-101等). OpenCM9.04的4-pin通信端口使用的是 Serial2(USART2)。

img

4-pin 通信端口线序

img

例子:通过蓝牙无线方式与手机端进行连接

img

例子:OpenCM9.04和RC-100遥控器通过蓝牙方式进行连接

img

例子:OpenCM9.04通过LN-01串口模块与PC连接

用户按钮(USER SW)

可由用户控制/编程的按钮。可用作插脚23或线路板按钮插脚。它可以在setup()中初始化pinMode(23, INPUT_PULLDOWN)。

如果OpenCM9.04正常情况下无法下载程序,请按住“用户按钮”的同时连接USB电缆,黄色状态指示灯将点亮,这时候可以尝试下载程序。如果是更新或恢复固件,请使用此按钮下载方式进行操作。

img

OpenCM9.04可以通过使用“用户按钮”进入“紧急恢复模式”

Micro-B USB接口

用于将程序下载到OpenCM9.04上,并用于通过USB与其他设备通信,同时向电路板提供5V电压。

连接电池后,USB的5V电源将自动断开,并由电池供电。

如果电流过大,内部保险丝会切断5V USB连接的电流,以保护用户的电脑免受损坏。

img

[Status LED]

用于测试OpenCM9.04程序的LED。当引脚14或BOARD_LED_PIN拉高时,LED点亮,当引脚拉低时,LED熄灭。也可以使用PWM进行控制。

img

Status LED 位置

RESET按钮

模拟CPU复位。

JTAG/SWD 4 PIN 接口

用于连接ST-LINK或其他电路调试器/编程器。

JTAG/SWD 4针端口可用于高级用户的各种开发。ST-LINK连接示例如下所示:

img

例子: ST-LINK 和 OpenCM9.04 连接

ROBOTIS 5-Pin接口

用于连接ROBOTIS 5-pin 设备模块 。

img

5-pin 端口和管脚说明

img

5-pin 连接线

5-pin 设备 Port 1 Port 2 Port 3 Port 4
IR Sensor O X X O
DMS Sensor O O O O
Gyro Sensor O O O O
Touch Sensor O O O O
Color Sensor X O O X
Magnetic Sensor O O O O
Temperature Sensor O O O O
Passive IR Sensor PIR-10 O O O O
LED Module X O O X

ROBOTIS 适配传感器和LED模块

I/O 管脚接口

OpenCM9.04的CPUSTM32F103CB可以通过GPIO引脚访问。

26个GPIO引脚(0~25)为数字输入/输出,工作电压为3.3V。数字输入高(3.3V)或低(0V)。

数字输入的最大切换速度为18Mhz。(引脚22和23除外,其最大切换速度为2Mhz)。

数字管脚只能承受高达3.3V的电压;任何大于3.3V的电压输入都可能损坏OpenCM9.04

5V容差引脚:10、11、12、13、14、15、16、17、18、19、20、21

这些引脚可承受的最大电流为25mA。(例外情况:针脚22和23只能耐受3mA。)

OpenCM9.04的所有GPIO引脚都可以在内部“上拉”或“下拉”,并且可以通过软件进行修改。“上拉”和“上拉”电阻为40KΩ(典型)。

img

OpenCM9.04 GPIO 管脚布局

名称 对应的Arduino管脚 描述
Serial/SerialUSB USB Port
Serial1 N/A DXL Port
Serial2 A4, A5 4PIN UART
Serial3 D24, D25 OpenCM485 EXP DXL Port
SPI1 A1, A6, A7
SPI2 D19, D20, D21
PWM A2 ~ D14
ADC A0 ~ A9
LED D14
EXTI A0 ~ D25
I2C D24, D25
BUTTON D23
5PIN #1 D2, D6, D7
5PIN #2 D3, D8, D9
5PIN #3 D0, D10, D11
5PIN #4 D1, D12, D13
4PIN UART D1, D12, D13 Serial2

img

JP2跳线位置和说明

img

示例:通过修改JP2将默认模拟参考电压(AREF)更改为5V

警告:当模拟参考管脚(AREF)被修改为5V时,请检查支持5V的引脚。

管脚名称定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#define LED_BUILTIN             14

#define BOARD_BUTTON_PIN 23 //PC15
#define BOARD_LED_PIN 14 //PB9

#define BOARD_USART1_TX_PIN 11 //D9(PA9)
#define BOARD_USART1_RX_PIN 12 //D10(PA10)
#define BOARD_USART2_TX_PIN 4 //D2 (PA2)
#define BOARD_USART2_RX_PIN 5 //D3 (PA3)
#define BOARD_USART3_TX_PIN 24 //D24 (PB10)
#define BOARD_USART3_RX_PIN 25 //D25 (PB11)

#define BOARD_SPI1_NSS_PIN 0 //D10 (PA4)
#define BOARD_SPI1_MOSI_PIN 7 //D11 PA7
#define BOARD_SPI1_MISO_PIN 6 //D12 PA6
#define BOARD_SPI1_SCK_PIN 1 //D13 PA5
#define BOARD_SPI2_NSS_PIN 18 //D26 PB12
#define BOARD_SPI2_MOSI_PIN 21 //D29 PB15
#define BOARD_SPI2_MISO_PIN 20 //D28 PB14
#define BOARD_SPI2_SCK_PIN 19 //D27 PB13

管脚功能定义

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
31
32
33
34
35
36
37
38
39
40
extern const Pin2PortMapArray g_Pin2PortMapArray[]=
{
{GPIOA, GPIO_PIN_4, &hADC1, ADC_CHANNEL_4 , NULL , NO_PWM , 0 }, // 0
{GPIOA, GPIO_PIN_5, &hADC1, ADC_CHANNEL_5 , NULL , NO_PWM , 1 }, // 1
{GPIOA, GPIO_PIN_0, &hADC1, ADC_CHANNEL_0 , &hTIM2 , TIM_CHANNEL_1, 2 }, // 2
{GPIOA, GPIO_PIN_1, &hADC1, ADC_CHANNEL_1 , &hTIM2 , TIM_CHANNEL_2, 3 }, // 3
{GPIOA, GPIO_PIN_2, &hADC1, ADC_CHANNEL_2 , &hTIM2 , TIM_CHANNEL_3, 4 }, // 4
{GPIOA, GPIO_PIN_3, &hADC1, ADC_CHANNEL_3 , &hTIM2 , TIM_CHANNEL_4, 5 }, // 5
{GPIOA, GPIO_PIN_6, &hADC1, ADC_CHANNEL_6 , &hTIM3 , TIM_CHANNEL_1, 6 }, // 6
{GPIOA, GPIO_PIN_7, &hADC1, ADC_CHANNEL_7 , &hTIM3 , TIM_CHANNEL_2, 7 }, // 7
{GPIOB, GPIO_PIN_0, &hADC1, ADC_CHANNEL_8 , &hTIM3 , TIM_CHANNEL_3, 8 }, // 8
{GPIOB, GPIO_PIN_1, &hADC1, ADC_CHANNEL_9 , &hTIM3 , TIM_CHANNEL_4, 9 }, // 9

{GPIOA, GPIO_PIN_8, NULL, NO_ADC , &hTIM1 , TIM_CHANNEL_1, 10 }, // 10
{GPIOA, GPIO_PIN_9, NULL, NO_ADC , &hTIM1 , TIM_CHANNEL_2, 11 }, // 11
{GPIOA, GPIO_PIN_10, NULL, NO_ADC , &hTIM1 , TIM_CHANNEL_3, 12 }, // 12
{GPIOB, GPIO_PIN_8, NULL, NO_ADC , &hTIM4 , TIM_CHANNEL_3, 13 }, // 13
{GPIOB, GPIO_PIN_9, NULL, NO_ADC , &hTIM4 , TIM_CHANNEL_4, 14 }, // 14 LED
{GPIOA, GPIO_PIN_15, NULL, NO_ADC , NULL , NO_PWM , 15 }, // 15
{GPIOB, GPIO_PIN_3, NULL, NO_ADC , NULL , NO_PWM , 16 }, // 16
{GPIOB, GPIO_PIN_4, NULL, NO_ADC , NULL , NO_PWM , 17 }, // 17
{GPIOB, GPIO_PIN_12, NULL, NO_ADC , NULL , NO_PWM , 18 }, // 18
{GPIOB, GPIO_PIN_13, NULL, NO_ADC , NULL , NO_PWM , 19 }, // 19

{GPIOB, GPIO_PIN_14, NULL, NO_ADC , NULL , NO_PWM , 20 }, // 20
{GPIOB, GPIO_PIN_15, NULL, NO_ADC , NULL , NO_PWM , 21 }, // 21
{GPIOC, GPIO_PIN_14, NULL, NO_ADC , NULL , NO_PWM , 22 }, // 22
{GPIOC, GPIO_PIN_15, NULL, NO_ADC , NULL , NO_PWM , 23 }, // 23 USER_BUTTON
{GPIOB, GPIO_PIN_10, NULL, NO_ADC , NULL , NO_PWM , 24 }, // 24
{GPIOB, GPIO_PIN_11, NULL, NO_ADC , NULL , NO_PWM , 25 }, // 25


{GPIOA, GPIO_PIN_13, NULL, NO_ADC , NULL , NO_PWM , NO_EXTI }, // 26 JTAG SWDIO
{GPIOA, GPIO_PIN_14, NULL, NO_ADC , NULL , NO_PWM , NO_EXTI }, // 27 JTAG SWDCLK
{GPIOB, GPIO_PIN_5, NULL, NO_ADC , NULL , NO_PWM , NO_EXTI }, // 28 DXL DIR
{GPIOB, GPIO_PIN_6, NULL, NO_ADC , NULL , NO_PWM , NO_EXTI }, // 29 DXL TXD
{GPIOB, GPIO_PIN_7, NULL, NO_ADC , NULL , NO_PWM , NO_EXTI }, // 30 DXL RXD

{NULL , 0 , NULL, NO_ADC , NULL , NO_PWM , NO_EXTI }
};