一个例子
//*****************************************************************************
// MSP-FET430F261x Demo - ADC12, Single Channel Extended Sample, TA1 Trigger
//
// Description: Sample and convert A0 using Timer_A as sample trigger in
// Extended Sample mode. Put "Num_of_Results" ADC12MEM0 values in results[]
// and Light LED (P1.0) when done.
//
// MSP430F2618
// ---------------
//| |
// Vin -->|P6.0/A0|
//| |
//
// R. B. Elliott / H. Grewal
// Texas Instruments Inc.
// Feb 2005
// Built with IAR Embedded Workbench Version: 3.21A
//*****************************************************************************
#include <判让msp430x26x.h>
#define Num_of_Results 512
int results[Num_of_Results] = {0}
void ADC_Init(void)
void main(void)
{
WDTCTL = WDTPW | WDTHOLD//看门狗 失效
ADC_Init() //初衫春始ADC12
ADC12CTL0 |= ENC// 开始转换
__bis_SR_register(LPM0_bits + GIE) // 进入LPM0
}
void ADC_Init(void)
{
P1DIR = 0xff// set port to outputs 用来观察 无用
P1OUT = 0 // reset port outputs 无用
P6SEL |= 0x01 // select A0 input 设置采集的口
ADC12CTL0 = ADC12ON+REF2_5V+REFON // Setup ADC12 各种设置
ADC12CTL1 = CONSEQ_2+SHS_1 // Timer triggers sampling各掘塌局种设置
ADC12MCTL0 = INCH_0 + SREF_1
ADC12IE = 0x0001// Enable ADC12IFG.0 中断使能
TACCR0 = 1500 // Delay to allow Ref to settle
TACCTL0 |= CCIE // Compare-mode interrupt.
TACTL = TASSEL_1 | MC_1 // TACLK = ACLK, Up mode.
__bis_SR_register(LPM3_bits + GIE) // Wait for delay, Enable interrupts
TACCTL0 &= ~CCIE// Disable timer
P2SEL |= BIT3 // Set for Timer A1
P2DIR |= 0x08
TACCR0 = 7 // Init TACCR0 w/ sample prd=CCR0+1设置ta 定时触发
TACCR1 = 4 // Trig for ADC12 sample &convert
TACCTL1 = OUTMOD_3 // Set/reset
TACTL = TACLR | MC_1 | TASSEL_1 // ACLK, clear TAR, up mode
}
// Timer_A0 Interrupt Service Routine
#pragma vector=TIMERA0_VECTOR
__interrupt void ta0_isr(void)
{
TACTL = 0
__bic_SR_register_on_exit(LPM3_bits)
}
// ADC12 Interrupt Service Routine
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
static unsigned int index = 0 //一个不断进入中断 但是值保持的变量 重要
results[index++] = ADC12MEM0// Move results 将的得道 的结果存到数组
if (index == 512)
{
ADC12CTL0 &= ~ENC // Stop conversion 关ad
ADC12CTL0 = 0
ADC12IE = 0
index = 0
P1OUT |= 0x01
}
}
假设工件已经过粗车,且工件余量全部为0.5-1.0mm,材料为45#钢,刀具为菱形外圆车刀:(省略顺序号)M03 S1200 T0101
M08 G99
G00X0 Z2
G01 Z0 F0.1
G03 X24 Z-24 R15 F0.05
G01 X32 W-15 F0.1
(这一程序段就是切削锥体的,车锥体不用考虑角度,而要通过角度算出坐标,你这个老师已经提供了坐标,所以不用另外计算,X(U) Z(W)是程序的终点坐标,如果你要用Z,那么就是G01 X32 Z-39 F0.1,你不会车锥体,可能是你不明白终点坐标的含意,终点坐标是指一个程序段的刀具要到达的终点,而不是整个程序的终点,起点坐标不用考虑,这里的起激铅点坐标就是上个程序段的终点,通常编程时可以是绝对值编程,也可以是用相对值编程,还可以是绝对值与相对值混合编程,当然老一些的系统不支持混合编程。)
Z-49;
(这种直线插补指令实际上格式是统一的,你也可以把它写成G01 X32 Z-49,因为X32既是这个程序段的终点,又是这个程序段的起点,故可以省略不写,同理,最前面那个G01 Z0 F0.1你也可以把毁信它写成G01 X0 Z0 F0.1,请注意在完全理解后,该省略的东西必须省略掉,编写程序要讲究简明扼要实用)
X16 Z-63
G02 X28 Z-74 R3.5(R7?未经求证R到底是多少才能满足条件!)
。。。
直线插补指令的灵活应用
前面说过编写程序要讲究简明扼要实用,下面我教你个不省略的编法:
工厂要车一根部份直径是10、长度150的小轴,假设后面有装夹部位,前面用活动顶尖顶住。
基本程序是:快速安全地定位到X10 Z2
接下来的指令通常就是:G01 Z-150 F0.1
当初由于刀具很锋利,零件是合格的,未产生中间大,二端小的现象,慢慢随着刀具磨损,就产生了“让刀”,即中间大,二端小,因为二端都有相对刚性的固定,而中间没纤铅轮有固定,假如不想用“跟刀架”,那么完全可以用程序来弥补这个缺陷,程序的编法是:假设中间大0.2
G01 X9.8 Z-75 F0.1
X10 Z-150
...
刚开始刀具锋利时,你可以将X9.8改成X10且不省略X10,第二条指令也不改动,仍然分为二步走,它不会影响数控车床切削,刀具磨损后就将X10改成X9.8即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)