工具/软件:Code Composer Studio
大家好、我在检测柔性传感器的电阻和柔性角时遇到了问题、 我确实有欧姆计的代码、但我难以创建电阻和柔性角感应。我的电路是一个带柔性传感器的基本分压器、连接到输出 A4、另一个电阻接地。 电压源连接到柔性传感器。 我尝试显示电阻和弯曲角度
下面是我的当前代码:
#include
#include
#include
const float VCC=4.98;
const float R_div = 47500;
const Straight 电阻= 37300;
const bend_阻力= 90000;
int main (空)
{
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
DCOCTL = 0;//选择最低 DCOx 和 MODx 设置
BCSCTL1 = CALBC1_1MHz;//将 MCLK 和 SMCLK 设置为1MHz
DCOCTL = CALDCO_1MHz;//将 MCLK 和 SMCLK 设置为1MHz
//////// 串行端口反向通道设置
P1SEL = BIT1 + BIT2;//选择 UART 作为引脚功能
P1SEL2 = BIT1 + BIT2;
UCA0CTL1 |= UCSWRST;//禁用 UART 模块进行配置
UCA0CTL0 = 0x00;//无奇偶校验、LSB 在前、8位数据、1个停止位、 UART、异步
UCA0CTL1 = UCSSEL_2 + UCSWRST;// SMCLK 源、保持在复位状态
UCA0BR0 = 104;// 9600波特率-假定为1MHz 时钟
UCA0BR1 = 0;// 9600波特率-假定为1MHz 时钟
UCA0MCTL = 0x02;//第二级调制= 1、过采样关闭
IE2 = 0x00;//中断被禁用
UCA0CTL1 &=~UCSWRST;
//模拟设置
ADC10CTL1 = INCH_4 + ADC10DIV_3;//温度传感器和 ADC10CLK/4
// ADC 设置参数
ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;
__delay_cycles (10000);// ADC 稳定所需
while (1)
{
ADC10CTL0 |= ENC + ADC10SC;//用中断开始采样和转换
_bis_SR_register (CPUOFF + GIE);//启用中断的 LPM0、睡眠直至中断
无符号长整型 flexADC = ADC10MEM;
int flexV = flexADC*VCC /1023;
int flexR = R_div *(VCC / flexV - 1);
// oC =((A10/1024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278
//数据在 ADC10MEM 中以磁力显示
serial_string ("电阻");
serial_number (flexADC);
}
}
// ADC10中断服务例程
#pragma vector=ADC10_vector
_interrupt void ADC10_ISR (void)
{
_BIC_SR_REGISTER_ON_EXIT (CPUOFF);//从0 (SR)清除 CPUOFF 位
}
//以下函数允许我们通过反向通道 UART 将字符串和数字写入 PC。
void serial_charTX (char c)
{
while (!(IFG2 & UCA0TXIFG));//等待发送缓冲区为空
UCA0TXBUF = c;//通过 Xmit 缓冲区发送字符
}
char serial_charRX (空)
{
while (!(IFG2 & UCA0RXIFG));//等待字符被接收
返回 UCA0RXBUF;//返回接收到的字符
}
void serial_string (字符串[])
{
int i;
for (i = 0;string[i]!='\0';i++)//发送字符直至字符串结束
{
if (string[i]='\n')//终端程序将\r 识别为回车
serial_charTX ('\r');
其他
serial_charTX (string[i]);
}
}
void serial_number (int 值)
{
字符串[10];
sprintf (string、"%d"、value);//将整数转换为字符串
serial_string (string);
}
这是 Arduino 代码版本、但我需要在 C 代码中使用它。
const int FLEX_PIN = A0; // Pin connected to voltage divider output
// Measure the voltage at 5V and the actual resistance of your
// 47k resistor, and enter them below:
const float VCC = 4.98; // Measured voltage of Ardunio 5V line
const float R_DIV = 47500.0; // Measured resistance of 3.3k resistor
// Upload the code, then try to adjust these values to more
// accurately calculate bend degree.
const float STRAIGHT_RESISTANCE = 37300.0; // resistance when straight
const float BEND_RESISTANCE = 90000.0; // resistance at 90 deg
void setup()
{
Serial.begin(9600);
pinMode(FLEX_PIN, INPUT);
}
void loop()
{
// Read the ADC, and calculate voltage and resistance from it
int flexADC = analogRead(FLEX_PIN);
float flexV = flexADC * VCC / 1023.0;
float flexR = R_DIV * (VCC / flexV - 1.0);
Serial.println("Resistance: " + String(flexR) + " ohms");
// Use the calculated resistance to estimate the sensor's
// bend angle:
float angle = map(flexR, STRAIGHT_RESISTANCE, BEND_RESISTANCE,
0, 90.0);
Serial.println("Bend: " + String(angle) + " degrees");
Serial.println();
delay(500);
}