240712
This commit is contained in:
parent
e0a18ca640
commit
d9ff1438db
@ -1,5 +1,12 @@
|
|||||||
## CAMS DATU :CAMS计算机辅助缝纫管理系统采集模块
|
## CAMS DATU :CAMS计算机辅助缝纫管理系统采集模块
|
||||||
|
|
||||||
|
|
||||||
|
#### 更新记录
|
||||||
|
|
||||||
|
24/7/12 更改校验为内部校验,与上位机协议测试、工作流程测试完成
|
||||||
|
24/7/8 根据0-10V ADC采集电路存在的输入电压为9V时即满量程问题,更改代码张力传感器量程为0-9V时对应0-100 cN
|
||||||
|
24/5/17 第一版完成
|
||||||
|
|
||||||
#### 引脚连接
|
#### 引脚连接
|
||||||
|
|
||||||
关于输入输出引脚连接说明
|
关于输入输出引脚连接说明
|
||||||
|
|||||||
@ -80,8 +80,17 @@ void adc_read()
|
|||||||
ADC.ADC1_0_h_vol = 0;
|
ADC.ADC1_0_h_vol = 0;
|
||||||
} else if (ADC.ADC1_0_h_vol > 1000) {
|
} else if (ADC.ADC1_0_h_vol > 1000) {
|
||||||
ADC.ADC1_0_h_vol = 1000;
|
ADC.ADC1_0_h_vol = 1000;
|
||||||
|
} else if (ADC.ADC1_0_h_vol >= 600 && ADC.ADC1_0_h_vol < 1000) {
|
||||||
|
ADC.ADC1_0_h_vol = ADC.ADC1_0_h_vol - 145;
|
||||||
|
} else if (ADC.ADC1_0_h_vol >= 300 && ADC.ADC1_0_h_vol < 600) {
|
||||||
|
ADC.ADC1_0_h_vol = ADC.ADC1_0_h_vol - 130;
|
||||||
|
} else if (ADC.ADC1_0_h_vol >= 200 && ADC.ADC1_0_h_vol < 300) {
|
||||||
|
ADC.ADC1_0_h_vol = ADC.ADC1_0_h_vol - 120;
|
||||||
|
} else if (ADC.ADC1_0_h_vol >= 100 && ADC.ADC1_0_h_vol < 200) {
|
||||||
|
ADC.ADC1_0_h_vol = ADC.ADC1_0_h_vol - 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ADC.ADC1_0_ZL_H = (ADC.ADC1_0_h_vol >> 8) & 0xFF;
|
// ADC.ADC1_0_ZL_H = (ADC.ADC1_0_h_vol >> 8) & 0xFF;
|
||||||
// ADC.ADC1_0_ZL_L = ADC.ADC1_0_h_vol & 0xFF;
|
// ADC.ADC1_0_ZL_L = ADC.ADC1_0_h_vol & 0xFF;
|
||||||
ADC.ADC1_0_ZL_H = ADC.ADC1_0_h_vol / 10;
|
ADC.ADC1_0_ZL_H = ADC.ADC1_0_h_vol / 10;
|
||||||
@ -155,7 +164,15 @@ void adc_read()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
rt_uint16_t get_ADC1_0_Value()
|
||||||
|
{
|
||||||
|
return ADC.ADC1_0_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
rt_uint16_t get_ADC2_4_Value()
|
||||||
|
{
|
||||||
|
return ADC.ADC2_4_value;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 获取ADC1张力值
|
* 获取ADC1张力值
|
||||||
* @return
|
* @return
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
#define ADC3_CHANNEL_11 11 /* ADC 通道 */
|
#define ADC3_CHANNEL_11 11 /* ADC 通道 */
|
||||||
|
|
||||||
#define REFER_VOLTAGE 330 /* 参考电压 3.3V,数据精度乘以100保留2位小数 */
|
#define REFER_VOLTAGE 330 /* 参考电压 3.3V,数据精度乘以100保留2位小数 */
|
||||||
|
#define REFER_VOLTAGE_9 900 /* 参考电压 3.3V,数据精度乘以100保留2位小数 */
|
||||||
#define CONVERT_BITS (1 << 12) /* 转换位数为12位 */
|
#define CONVERT_BITS (1 << 12) /* 转换位数为12位 */
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -55,6 +56,9 @@ rt_uint8_t adc_init();
|
|||||||
//ADC读取数据
|
//ADC读取数据
|
||||||
void adc_read();
|
void adc_read();
|
||||||
|
|
||||||
|
rt_uint16_t get_ADC1_0_Value();
|
||||||
|
rt_uint16_t get_ADC2_4_Value();
|
||||||
|
|
||||||
//获取3V3的值ADC
|
//获取3V3的值ADC
|
||||||
rt_uint16_t get_ADC3_10_vol();
|
rt_uint16_t get_ADC3_10_vol();
|
||||||
|
|
||||||
|
|||||||
@ -13,27 +13,71 @@
|
|||||||
DATU_t DATU;
|
DATU_t DATU;
|
||||||
|
|
||||||
//CRC校验
|
//CRC校验
|
||||||
|
static const rt_uint16_t CRC16_LIST[256] =
|
||||||
|
{
|
||||||
|
0x0000, 0x3096, 0x612C, 0x51BA, 0xC419, 0xF48F, 0xA535, 0x95A3,
|
||||||
|
0x8832, 0xB8A4, 0xE91E, 0xD988, 0x4C2B, 0x7CBD, 0x2D07, 0x1D91,
|
||||||
|
0x1064, 0x20F2, 0x7148, 0x41DE, 0xD47D, 0xE4EB, 0xB551, 0x85C7,
|
||||||
|
0x9856, 0xA8C0, 0xF97A, 0xC9EC, 0x5C4F, 0x6CD9, 0x3D63, 0x0DF5,
|
||||||
|
0x20C8, 0x105E, 0x41E4, 0x7172, 0xE4D1, 0xD447, 0x85FD, 0xB56B,
|
||||||
|
0xA8FA, 0x986C, 0xC9D6, 0xF940, 0x6CE3, 0x5C75, 0x0DCF, 0x3D59,
|
||||||
|
0x30AC, 0x003A, 0x5180, 0x6116, 0xF4B5, 0xC423, 0x9599, 0xA50F,
|
||||||
|
0xB89E, 0x8808, 0xD9B2, 0xE924, 0x7C87, 0x4C11, 0x1DAB, 0x2D3D,
|
||||||
|
0x4190, 0x7106, 0x20BC, 0x102A, 0x8589, 0xB51F, 0xE4A5, 0xD433,
|
||||||
|
0xC9A2, 0xF934, 0xA88E, 0x9818, 0x0DBB, 0x3D2D, 0x6C97, 0x5C01,
|
||||||
|
0x51F4, 0x6162, 0x30D8, 0x004E, 0x95ED, 0xA57B, 0xF4C1, 0xC457,
|
||||||
|
0xD9C6, 0xE950, 0xB8EA, 0x887C, 0x1DDF, 0x2D49, 0x7CF3, 0x4C65,
|
||||||
|
0x6158, 0x51CE, 0x0074, 0x30E2, 0xA541, 0x95D7, 0xC46D, 0xF4FB,
|
||||||
|
0xE96A, 0xD9FC, 0x8846, 0xB8D0, 0x2D73, 0x1DE5, 0x4C5F, 0x7CC9,
|
||||||
|
0x713C, 0x41AA, 0x1010, 0x2086, 0xB525, 0x85B3, 0xD409, 0xE49F,
|
||||||
|
0xF90E, 0xC998, 0x9822, 0xA8B4, 0x3D17, 0x0D81, 0x5C3B, 0x6CAD,
|
||||||
|
0x8320, 0xB3B6, 0xE20C, 0xD29A, 0x4739, 0x77AF, 0x2615, 0x1683,
|
||||||
|
0x0B12, 0x3B84, 0x6A3E, 0x5AA8, 0xCF0B, 0xFF9D, 0xAE27, 0x9EB1,
|
||||||
|
0x9344, 0xA3D2, 0xF268, 0xC2FE, 0x575D, 0x67CB, 0x3671, 0x06E7,
|
||||||
|
0x1B76, 0x2BE0, 0x7A5A, 0x4ACC, 0xDF6F, 0xEFF9, 0xBE43, 0x8ED5,
|
||||||
|
0xA3E8, 0x937E, 0xC2C4, 0xF252, 0x67F1, 0x5767, 0x06DD, 0x364B,
|
||||||
|
0x2BDA, 0x1B4C, 0x4AF6, 0x7A60, 0xEFC3, 0xDF55, 0x8EEF, 0xBE79,
|
||||||
|
0xB38C, 0x831A, 0xD2A0, 0xE236, 0x7795, 0x4703, 0x16B9, 0x262F,
|
||||||
|
0x3BBE, 0x0B28, 0x5A92, 0x6A04, 0xFFA7, 0xCF31, 0x9E8B, 0xAE1D,
|
||||||
|
0xC2B0, 0xF226, 0xA39C, 0x930A, 0x06A9, 0x363F, 0x6785, 0x5713,
|
||||||
|
0x4A82, 0x7A14, 0x2BAE, 0x1B38, 0x8E9B, 0xBE0D, 0xEFB7, 0xDF21,
|
||||||
|
0xD2D4, 0xE242, 0xB3F8, 0x836E, 0x16CD, 0x265B, 0x77E1, 0x4777,
|
||||||
|
0x5AE6, 0x6A70, 0x3BCA, 0x0B5C, 0x9EFF, 0xAE69, 0xFFD3, 0xCF45,
|
||||||
|
0xE278, 0xD2EE, 0x8354, 0xB3C2, 0x2661, 0x16F7, 0x474D, 0x77DB,
|
||||||
|
0x6A4A, 0x5ADC, 0x0B66, 0x3BF0, 0xAE53, 0x9EC5, 0xCF7F, 0xFFE9,
|
||||||
|
0xF21C, 0xC28A, 0x9330, 0xA3A6, 0x3605, 0x0693, 0x5729, 0x67BF,
|
||||||
|
0x7A2E, 0x4AB8, 0x1B02, 0x2B94, 0xBE37, 0x8EA1, 0xDF1B, 0xEF8D,
|
||||||
|
};
|
||||||
|
|
||||||
rt_uint16_t CRC16_Calculate(rt_uint8_t *data, rt_uint8_t len)
|
rt_uint16_t CRC16_Calculate(rt_uint8_t *data, rt_uint8_t len)
|
||||||
{
|
{
|
||||||
rt_uint16_t CRC16in = 0xFFFF;
|
rt_uint16_t crcword = 0x0000;
|
||||||
rt_uint16_t CPoly = 0xA001; /*0x8005高低位交换*/
|
|
||||||
|
|
||||||
while (len--)
|
for (rt_uint8_t i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
CRC16in ^= *(data++);
|
crcword = (crcword >> 8) ^ CRC16_LIST[((crcword ^ data[i]) & 0xFF)];
|
||||||
for(rt_uint8_t i = 0;i < 8;i++)
|
|
||||||
{
|
|
||||||
if(CRC16in & 0x01)
|
|
||||||
CRC16in = (CRC16in >> 1) ^ CPoly;
|
|
||||||
else
|
|
||||||
CRC16in = CRC16in >> 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CRC16in = CRC16in % 256 * 256 + CRC16in / 256; /*调换高低Byte*/
|
return crcword;
|
||||||
|
|
||||||
return (CRC16in);
|
|
||||||
}
|
}
|
||||||
|
// rt_uint16_t CRC16in = 0xFFFF;
|
||||||
|
// rt_uint16_t CPoly = 0xA001; /*0x8005高低位交换*/
|
||||||
|
//
|
||||||
|
// while (len--)
|
||||||
|
// {
|
||||||
|
// CRC16in ^= *(data++);
|
||||||
|
// for(rt_uint8_t i = 0;i < 8;i++)
|
||||||
|
// {
|
||||||
|
// if(CRC16in & 0x01)
|
||||||
|
// CRC16in = (CRC16in >> 1) ^ CPoly;
|
||||||
|
// else
|
||||||
|
// CRC16in = CRC16in >> 1;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// CRC16in = CRC16in % 256 * 256 + CRC16in / 256; /*调换高低Byte*/
|
||||||
|
//
|
||||||
|
// return (CRC16in);
|
||||||
|
|
||||||
|
|
||||||
//阅读命令
|
//阅读命令
|
||||||
@ -99,27 +143,34 @@ void datu_init()
|
|||||||
D, A, T, U 主轴针数 面线1张力值 面线2张力值 传感器状态 B4--B13的16位CRC
|
D, A, T, U 主轴针数 面线1张力值 面线2张力值 传感器状态 B4--B13的16位CRC
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
rt_thread_mdelay(100);
|
rt_thread_mdelay(10);
|
||||||
|
|
||||||
// 主机命令或者有针数时发一条数据上去
|
// 主机命令或者有针数时发一条数据上去
|
||||||
if (DATU.send_data || get_IO_NeedleCountUpdateFlag()) {
|
if (DATU.send_data || get_IO_NeedleCountUpdateFlag()) {
|
||||||
rt_uint32_t temp = get_IO_NeedleCount_sum();
|
rt_uint32_t temp = get_IO_NeedleCount_sum();
|
||||||
|
|
||||||
send_buf[4] = (temp >> 24) & 0xFF; // 获取最高8位
|
send_buf[7] = (temp >> 24) & 0xFF; // 获取最高8位
|
||||||
send_buf[5] = (temp >> 16) & 0xFF; // 获取次高8位
|
send_buf[6] = (temp >> 16) & 0xFF; // 获取次高8位
|
||||||
send_buf[6] = (temp >> 8) & 0xFF; // 获取次低8位
|
send_buf[5] = (temp >> 8) & 0xFF; // 获取次低8位
|
||||||
send_buf[7] = temp & 0xFF; // 获取最低8位
|
send_buf[4] = temp & 0xFF; // 获取最低8位
|
||||||
|
|
||||||
|
// send_buf[8] = get_ADC1_0_H_ZL();
|
||||||
|
// send_buf[9] = get_ADC1_0_L_ZL();
|
||||||
|
// send_buf[10] = get_ADC2_4_H_ZL();
|
||||||
|
// send_buf[11] = get_ADC2_4_L_ZL();
|
||||||
|
|
||||||
|
//直接发4096值
|
||||||
|
send_buf[9] = (get_ADC1_0_Value()>> 8) & 0xFF;
|
||||||
|
send_buf[8] = get_ADC1_0_Value() & 0xFF;
|
||||||
|
send_buf[11] = (get_ADC2_4_Value()>> 8) & 0xFF;
|
||||||
|
send_buf[10] = get_ADC2_4_Value() & 0xFF;
|
||||||
|
|
||||||
send_buf[8] = get_ADC1_0_H_ZL();
|
|
||||||
send_buf[9] = get_ADC1_0_L_ZL();
|
|
||||||
send_buf[10] = get_ADC2_4_H_ZL();
|
|
||||||
send_buf[11] = get_ADC2_4_L_ZL();
|
|
||||||
|
|
||||||
send_buf[13] = get_IO_Value(); //端口传感器状态
|
send_buf[13] = get_IO_Value(); //端口传感器状态
|
||||||
rt_uint16_t crc = CRC16_Calculate(send_buf + 4, 10);
|
rt_uint16_t crc = CRC16_Calculate(send_buf + 4, 10);
|
||||||
// rt_kprintf("CRC %x\n ", crc);
|
// rt_kprintf("CRC %x\n ", crc);
|
||||||
send_buf[14] = crc >> 8;
|
send_buf[15] = crc >> 8;
|
||||||
send_buf[15] = crc & 0xFF;
|
send_buf[14] = crc & 0xFF;
|
||||||
send_len = rs485_send(hinst, (void *) send_buf, sizeof(send_buf));
|
send_len = rs485_send(hinst, (void *) send_buf, sizeof(send_buf));
|
||||||
DATU.send_data =0;
|
DATU.send_data =0;
|
||||||
}
|
}
|
||||||
@ -238,6 +289,7 @@ void datu_init()
|
|||||||
case 1:
|
case 1:
|
||||||
//主轴针数清零
|
//主轴针数清零
|
||||||
set_IO_NeedleCount_sum(0);
|
set_IO_NeedleCount_sum(0);
|
||||||
|
DATU.send_data=1;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
//闪灯
|
//闪灯
|
||||||
|
|||||||
@ -80,7 +80,7 @@ void Menu_one()
|
|||||||
|
|
||||||
//ssd1306_Line(1, 12, SSD1306_WIDTH - 1, 12, White);
|
//ssd1306_Line(1, 12, SSD1306_WIDTH - 1, 12, White);
|
||||||
ssd1306_SetCursor(2, 20);
|
ssd1306_SetCursor(2, 20);
|
||||||
ssd1306_WriteString("index", Font_11x18, White);
|
ssd1306_WriteString("GOATS", Font_11x18, White);
|
||||||
|
|
||||||
// ssd1306_UpdateScreen();
|
// ssd1306_UpdateScreen();
|
||||||
ssd1306_UpdateScreenArea(0, 18, 128, 46);
|
ssd1306_UpdateScreenArea(0, 18, 128, 46);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user